Java 中的响应式批处理
Responsive batch processing in Java
我喜欢这样的事实,线程可以共享一些资源,但他们最终需要释放自己的私有资源。同时,一些计算可能已过时,您可以使用任务管理器终止它们。我正在寻找在一个 JVM 进程中完成的相同事情。
你说 and propose that my thread polls the interrupted
flag instead。但是,轮询效率不高,对吧?您既不希望性能下降,也不希望无处不在的 if (interrupted)
块污染您的代码。什么是最合适的选择?
在由多个交互进程组成的应用程序中终止一个进程可能是危险的,但通常并不像那样危险杀死一个线程。
一个进程依赖于另一个进程状态的方式通常更为有限。如果进程仅通过网络通信进行交互,那么设计一个可以从其中一个进程被杀死中正常恢复的应用程序可能并不困难。同样,如果进程通过共享事务数据库进行交互。
如果进程通过共享文件进行交互,则安全地处理 KILL 会变得更加困难。如果进程通过共享内存交互,保证任意 KILL 的安全性几乎是不可能的。
线程总是通过共享内存进行交互。无法处理的 KILL 可能会在 任何 时间出现。只是无法保证杀死某些线程不会使整个程序处于损坏状态。
这就是 Java 中弃用 t.stop()
的原因。 真正的问题应该是,"why did they ever implement t.stop()
in the first place?"
我喜欢这样的事实,线程可以共享一些资源,但他们最终需要释放自己的私有资源。同时,一些计算可能已过时,您可以使用任务管理器终止它们。我正在寻找在一个 JVM 进程中完成的相同事情。
你说interrupted
flag instead。但是,轮询效率不高,对吧?您既不希望性能下降,也不希望无处不在的 if (interrupted)
块污染您的代码。什么是最合适的选择?
在由多个交互进程组成的应用程序中终止一个进程可能是危险的,但通常并不像那样危险杀死一个线程。
一个进程依赖于另一个进程状态的方式通常更为有限。如果进程仅通过网络通信进行交互,那么设计一个可以从其中一个进程被杀死中正常恢复的应用程序可能并不困难。同样,如果进程通过共享事务数据库进行交互。
如果进程通过共享文件进行交互,则安全地处理 KILL 会变得更加困难。如果进程通过共享内存交互,保证任意 KILL 的安全性几乎是不可能的。
线程总是通过共享内存进行交互。无法处理的 KILL 可能会在 任何 时间出现。只是无法保证杀死某些线程不会使整个程序处于损坏状态。
这就是 Java 中弃用 t.stop()
的原因。 真正的问题应该是,"why did they ever implement t.stop()
in the first place?"