子线程开启却导致了主线程的堵塞?求解

CarsonWoo 2020-07-16 10:02:28
有个问题想请教大佬们 为何我在主线程开启了一个子线程A 此线程中主要通过CountDownLatch来做同步等待 目的是等待其他两个线程B和C的结束 可是为何主线程会卡死呢
...全文
4999 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CarsonWoo 2020-07-18
  • 打赏
  • 举报
回复
找到原因了。。。线程a这样写会导致一初始化就等待 卡死了主线程
CarsonWoo 2020-07-17
  • 打赏
  • 举报
回复
我这边的代码大概如下:

线程A:

class ThreadA : HandlerThread("handler-thread") {
private val mCountLatch = CountDownLatch(2)

private val mHandler: Handler

init {
start()
mHandler = Handler(looper) {
override fun handleMessage(msg: Message?) {
when (msg?.what) {
Const.THREAD_B_FINISHED ->
mCountLatch.countDown()
Const.THREAD_C_FINISHED ->
mCountLatch.countDown()
}
}
}
mCountLatch.await()
Log.i(TAG, "all complete")
mHandler.post {
// uiDoSomething
}
}

fun getHandler(): Handler {
return mHandler
}
}



线程B和线程C会持有线程A的handler 然后 都是在结束的时候sendEmptyMessage()回去 但是在主线程初始化线程A的时候 就一直卡住了 动都动不了
zhang106209 2020-07-17
  • 打赏
  • 举报
回复
看看自己主线程中是不是有什么等待的动作,你可以把代码贴出来看看

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧