sách gpt4 ai đã đi

kotlin coroutines - Tại sao Thread.sleep không tạm dừng luồng chính khi nó được bắt đầu?

In lại 作者:行者123 更新时间:2023-12-04 09:22:29 hai mươi bốn 4
mua khóa gpt4 Nike

我想尝试从一个courtine 中暂停主线程。几个问题,但首先让我向您展示我正在使用的代码块作为测试:

class MainActivity : Activity(), CoroutineScope by MainScope() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

launch(Dispatchers.Main) {

val threadName = Thread.currentThread()
Log.v("mytag", "$threadName")
Log.v("mytag", "111 ")
Thread.sleep(5000)
Log.v("mytag", "222")

}

Thread.sleep(2500) //give coroutine some time to launch fully.
Log.v("mytag", "333")
}
}
产生以下输出:
V/mytag: 333
V/mytag: Thread[main,5,main]
V/mytag: 111
V/mytag: 222
因为我打印出当前线程名称不是主要的吗?我收到“线程 [main,5,main]”
所以假设我在主线程上,那么为什么当我运行 Thread.sleep(5000) 时会打印“333”?我期待“333”将是最后一次打印,因为我已经卡住了主线程。

1 Câu trả lời

调度员Dispatchers.Main调度协程在主线程被释放后立即运行。
它不会立即启动,因为您的 onCreate()也在主线程上运行,所以主线程不是空闲的 onCreate() ,主线程循环器将检查任何已调度的协程并在有时运行它。
如果您明确希望在调用启动后立即启动,并且如果您是线程的所有者(在本例中为 main)并且您是此处的所有者,因为您的函数 onCreate 在 main 上运行,您可以使用 Dispatchers.Main.immediate调度员在那里。

// immediate will launch immediately if current function is running on Dispatchers.Main which is true
launch(Dispatchers.Main.immediate) {
val threadName = Thread.currentThread()
Log.v("mytag", "$threadName")
Log.v("mytag", "111")
Thread.sleep(5000)
Log.v("mytag", "222")
}

Thread.sleep(2500)
Log.v("mytag", "333")
输出(日志):
V/mytag: Thread[main,5,main]
V/mytag: 111
V/mytag: 222
V/mytag: 333

关于kotlin-coroutines - kotlin coroutines - 为什么 Thread.sleep 不会在启动时暂停主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63076204/

hai mươi bốn 4 0
Bài viết được đề xuất: android - 如何在 Android Studio 中禁用 lambda 功能?
Bài viết được đề xuất: micronaut - 了解 Micronaut 2
Bài viết được đề xuất: neo4j - 获取节点/边创建/删除统计信息
Bài viết được đề xuất: javascript - 父级内的 Vanilla javascript可拖动div
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com