Kotlin `?.let` 是线程安全的吗?

2024-01-06

是科特林吗?.let线程安全?

比方说a变量可以在不同的线程中更改。 正在使用a?.let { /* */ }线程安全?如果它等于if (a != null) { block() }会不会发生在if它不为空并且在block它已经为空了吗?


a?.let { block() }确实相当于if (a != null) block().

这也意味着如果a是一个可变变量,那么:

  1. If a是一个可变变量,它可能会在空检查后重新分配并保存null期间某个时刻的值block()执行;

  2. 所有与并发相关的效果都有效,并且在以下情况下需要适当的同步:a在线程之间共享以避免竞争条件,如果block()访问a again;

然而,作为let { ... }实际上将其接收者作为单个参数传递给它所采用的函数,它可用于捕获a并在 lambda 中使用它,而不是在 lambda 中再次访问该属性block()。例如:

a?.let { notNullA -> block(notNullA) }

// with implicit parameter `it`, this is equivalent to:
a?.let { block(it) }

这里,值a作为参数传递到 lambda 的值保证与检查 null 的值相同。然而,观察a再次在block()可能返回 null 或不同的值,并且观察给定实例的可变状态也应该正确同步。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin `?.let` 是线程安全的吗? 的相关文章

  • 如何从屏幕上的任意位置拖动底页?

    我正在尝试实现类似 YouTube 的体验 并允许用户从屏幕中的任何位置拖动底部工作表 我尝试了很多解决方案没有任何帮助 我终于从这个解决方案中找到了解决方案在外部区域达到阈值后允许 BottomSheet 向上滑动 https stack
  • Java - 多线程代码在更多内核上运行速度并不更快

    我只是在 4 核机器上运行一些多线程代码 希望它比在单核机器上更快 想法是这样的 我有固定数量的线程 在我的例子中每个核心一个线程 每个线程执行一个Runnable形式 private static int data data shared
  • 在 Windows 上使用 PHP 进行分叉/线程的最佳方法是什么?

    我有一个 php 脚本 用于检查许多 数千个 网站上的更新 有时 随着站点数量的增加 情况会更频繁 我在更新其中一个站点时会遇到执行超时 整个脚本都会付诸东流 我能想到的最好的想法是分叉每个更新 所以如果它死了 整体更新就会继续 从我收集到
  • Kotlin:使用地图变换时 {} 和 () 之间的区别?

    我是科特林新手 我总是使用带花括号的地图变换 然后 为什么这有效 gt val x someList map SomeConstructor 这不是吗 val x someList map SomeConstructor 我在在线教程的任何
  • 在 Process Explorer 中调试 RtlUserThreadStart

    我有一个基于 3 5 构建的多线程 wpf 应用程序 当我通过 Process Explorer 查看正在运行的线程时 我看到 8 个线程都具有相同的起始地址 ntdll dll RtlUserThreadStart 并且所有 8 个线程的
  • 如何安排函数在 Qt for Python 的主 UI 线程上运行?

    我正在移植一个 Python GTK 应用程序 因此它使用 Qt for Python PySide2 它使用Python标准实现工作线程threading模块和工作线程使用Gdk threads add idle 与主 GUI 线程交互
  • 第一次调用后 LiveData 未观察到

    我实现了 LiveData 和 ViewModel 来模仿 AsyncTaskLoader 我从 DCIM 中的相机目录加载文件名 然后附加一个 fileObserver 来观察删除文件 图片 时的情况 然后回调告诉 LiveData 在发
  • 如何在 GitHub Actions 上运行 Kotlin 脚本?

    我想在 CI 中运行 Kotlin 脚本而不依赖于 Gradle 项目 这样我就可以轻松地执行使用 shell bash batch 难以编程的操作 并且可以在需要时使用库 让 Kotlin 脚本仅在 Ubuntu Linux 上运行是可以
  • 在 Kotlin 中将 Dp 转换为 Px - 这种转换永远不会成功

    我在使用 Kotlin 编码时遇到了问题 我复制粘贴了一个java代码示例 https stackoverflow com a 9685690 6818446将 DP 转换为像素 以便将其作为以编程方式设置填充的参数 我原本期望 IDE 能
  • Enthought Python 中的线程 FFT

    Numpy SciPy 中的快速傅立叶变换 FFT 不是线程化的 Enthought Python 附带 Intel MKL 数值库 该库能够进行线程 FFT 如何获得这些例程 以下代码适用于 Windows 7 Ultimate 64 位
  • Thread.Sleep 是否会妨碍其他线程?

    这是一个控制台程序 希望 10 个线程批量启动 等待 5 秒 然后批量停止 static void Main string args System Threading Tasks Parallel For 0 10 index gt Act
  • JUnit、测试和线程

    当我连续运行多个 JUnit 测试时 JUnit 是否为每次执行创建一个新线程 或者所有内容都包装在一个线程中 Thanks 这一切都在一个线程上 您没有说明如何调用测试 但例如 运行 TestSuite 将按顺序运行套件中的所有测试 如果
  • 两个具有共享缓冲区的等待线程(生产者/消费者)

    我试图让一堆生产者线程等待 直到缓冲区有空间容纳某个项目 然后将项目放入缓冲区 如果没有更多空间 则返回睡眠状态 同时应该有一堆消费者线程等待 直到缓冲区中有东西 然后尽可能地从缓冲区中获取东西 如果缓冲区为空则返回睡眠状态 在伪代码中 这
  • Kotlin 中是否可以为 mutableStateOf() 提供自定义设置器

    我想在每次设置某个状态后两秒进行一些操作 viewModel 内的代码 var isLoading mutableStateOf LoadingState NONE set value Timber d Custom Setter Not
  • 是否可以从父线程访问/更新子线程的资源?

    我正在用 C 语言进行套接字编程 并且对多线程完全陌生 这是我的场景 我需要一个父线程从套接字读取数据 可以说 并将其排队到其子线程的队列中 这里的问题是 如何更新子线程的队列 具体来自父线程 支持多个生产者和消费者的线程安全队列 MtQu
  • 线程同时打印会弄乱文本输出

    我在应用程序中使用 4 个线程 它们返回我想要打印给用户的文本 由于我想避免线程独立打印这些文本 因此我创建了一个类来管理它 我不知道我在这里做错了什么 但它仍然不起作用 您可以在下面看到代码 from threading import T
  • 如何将异步函数传递给 Python 中的线程目标?

    我有以下代码 async some callback args await some function 我需要将它作为目标传递给线程 thread threading Thread target some callback args som
  • 从后台线程更新可观察列表的正确方法

    我正在尝试遵循 MVC 进行测试项目 因此我的模型应该完全独立于我的观点 但是我不确定应该如何更新在后台线程中更新的可观察列表 正在给出有关上传的字符串 文件 以便消息显示在 UI 上的 ListView 中 我正在使用 JavaFX 并尝
  • 实体框架和多线程

    我有一个处理一些消息的 WCF 服务 我使用 EntityFramework 来检索消息 我将这些消息添加到线程池队列中 然后处理它们 处理完所有消息后 我调用实体框架上的更新来更新消息的状态 在此操作期间 我随机收到错误 在没有先在具有相
  • GCD获取队列名称/标签

    如何获取当前队列名称 我的意思是队列标签com example myqueue 在 Xcode 4 调试器中我只能看到 block invoke 1 怎么样dispatch queue get label http developer ap

随机推荐