【问题标题】:Consequences of Thread.stop() [duplicate]Thread.stop() 的后果 [重复]
【发布时间】:2013-09-11 16:37:04
【问题描述】:

我知道不推荐使用 Thread.stop() 并且我已经知道停止线程的替代方法。但是 Thread.stop() 的直接后果是什么?是什么让 Thread.stop() 如此“危险”?

如果我在 Activity (onDestroy) 结束时调用 Thread.stop() 会导致任何问题(我想阻止 Thread 立即访问我的 Activity 中的对象)吗?

谢谢和问候

【问题讨论】:

标签: java android multithreading thread-safety android-activity


【解决方案1】:

文档表明 Thread.stop() 会引发 ThreadDeath 异常,并且任何 finally 块以及任何拦截/捕获 ThreadDeath 的代码仍将运行。如果您的目标是阻止线程访问对象,那么这不是解决方案。

【讨论】:

  • 如果线程作为守护进程运行,JVM 会在活动完成时杀死线程吗?
  • 我不确定。在我认为是 Android 线程的底层实现的 pthreads 中,程序将等待所有线程完成后再退出进程。所以我猜你需要手动终止其他线程。但我不完全确定。
  • @user2224350 否,因为活动完成不会停止应用程序进程。线程将继续运行,直到应用程序进程被系统明确杀死。这种情况很少发生,因为应用程序旨在尽可能长时间地在后台保持活动状态以减少重新启动时间。因此,Deamon 线程在 Android 中基本上是无用的。
  • 所以如果线程被合法运行,我必须在每个“不安全调用”之前检查每个线程?这似乎不是很优雅..
【解决方案2】:

Thread.stop() 很危险,因为它会释放所有锁定的对象。这意味着,例如,如果对象正在更新一个数组并且它已将其锁定,因此其他线程在使用该数组之前正在等待该线程完成,并且您调用 Thread.stop(),那么该数组将只部分更新。这可能会导致代码的其他部分出现难以调试的错误。

【讨论】:

    猜你喜欢
    • 2013-03-21
    • 2012-07-05
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    相关资源
    最近更新 更多