java - 如何看待 Java 线程?又名 Thread.stop

标签 java multithreading

说明:

我认为 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/

相关文章:

c# - UI 在图像控件加载 BitmapImage 时卡住

c - 如何分析线程负载平衡?

c++ - 同一端口套接字上的多个连接 C++

c++ - 中断在运行进程时被阻塞的线程的最简单方法

java - 将 Tango 3D 点投影到屏幕 Google Project Tango

java - Spring集成邮件入站 channel

java - Full GC 背后的原因是什么?

java - 在 NetBeans 中进行调试而不改变焦点

java - 如何添加 f :ajax tag to a dynamically generated checkbox? 的等效值

python - 在 Python 3 中发送多个 HTTP 请求的最佳方式是什么?