说明:
我认为 Java VM 很棒。它保证了字节码的安全性,标准库,......是惊人的,尤其是动态加载 Java 类的能力,并且知道它不会使 VM 崩溃(祝你好运 *.so 文件或内核模块)。
我不明白的一件事是 Java 如何处理 Thread.stop
我读过 http://java.sun.com/j2se/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html 但由于以下原因,它看起来很奇怪:
1)资源管理
在 Unix 操作系统上,如果一个进程正在占用资源,我可以 kill -9 它。
2) 抽象的打破:
如果我开始一项计算量大的工作,并且我不再需要计算,我可以 kill -9 它。在这种 Java 线程模型下,我的计算线程 必须定期检查一些 boolean 标志以确定它是否应该退出 [这似乎破坏了抽象层——当我编写计算代码时,我应该集中注意力在计算代码上,而不是在哪里展开检查是否应该终止。
3) 锁/监视器的安全
所以官方的原因是“什么是线程持有 Lock/Monitor 并获得 Thread.stopped?对象将处于损坏状态”——然而,在操作系统中这不是问题,我们有中断处理程序。为什么 Java 线程不能拥有像 OS 中断处理程序一样工作的中断处理程序?
问题:
很明显,我在考虑 Java 线程时使用了错误的心智模型。我应该如何考虑 Java 线程?
谢谢!
最佳答案
我认为要记住的关键是线程不是进程。线程唯一“拥有”的是执行线程,因为其他一切都可能与同一进程(内存空间)内的其他线程共享。停止一个线程并不能清除任何东西,因为对于其他线程来说,事情可能仍然是完全有效的。
在操作系统进程中,操作系统会跟踪进程拥有的所有内容(内存、文件、锁等),并在您 SIGKILL 进程时正确清理这些内容。
关于java - 如何看待 Java 线程?又名 Thread.stop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036174/