Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么时候可以在Java中使用ad.stop()?_Java_Multithreading_Synchronization - Fatal编程技术网

什么时候可以在Java中使用ad.stop()?

什么时候可以在Java中使用ad.stop()?,java,multithreading,synchronization,Java,Multithreading,Synchronization,Thread.stop()的Java文档让人觉得如果调用Thread.stop(),世界就要结束了 已弃用。这种方法本质上是不安全的。停止线程 Thread.stop使其解锁所有已锁定的监视器 (作为未经检查的线程死亡例外的自然结果) 向上传播堆栈)。如果以前受保护的任何对象 由于这些监视器处于不一致的状态,损坏的物体 对其他线程可见,可能导致任意 行为。stop的许多用法应该被简单 修改某些变量以指示目标线程应停止 跑步目标线程应定期检查此变量,并且 如果变量 表示要停止运行。如果目标线程等待

Thread.stop()的Java文档让人觉得如果调用Thread.stop(),世界就要结束了

已弃用。这种方法本质上是不安全的。停止线程 Thread.stop使其解锁所有已锁定的监视器 (作为未经检查的线程死亡例外的自然结果) 向上传播堆栈)。如果以前受保护的任何对象 由于这些监视器处于不一致的状态,损坏的物体 对其他线程可见,可能导致任意 行为。stop的许多用法应该被简单 修改某些变量以指示目标线程应停止 跑步目标线程应定期检查此变量,并且 如果变量 表示要停止运行。如果目标线程等待 长周期(例如,在条件变量上),中断 方法来中断等待。有关详细信息,请参阅 为什么Thread.stop、Thread.suspend和Thread.resume不推荐使用

例如,如果我在第三方封闭源代码库中运行一个方法,并且我需要保证它在5分钟或更短的时间内结束,还有其他方法吗?使用Thread.stop()的实际后果是什么?我如何确定它们是否发生了?

永远不会! 在任何情况下都不应使用
Thread.stop()

如果您认为需要调用
Thread.stop()
不要!这是错误的

在任何情况下都不应调用Thread.stop()

请不要调用
Thread.stop()
——即使您面临死亡威胁

我将此答案捐赠给
社区维基
请-其他人-加入我的行列,通过编辑此答案并添加您的祈祷,提醒那些异教徒不要调用
线程.stop()

如果您真的想在5分钟后终止一个进程,请使用可以终止的。这将保护主JVM免受使用
thread.stop()
终止线程时可能发生的任何潜在损坏。但是,如果子<代码>进程处于I/O的中间,这可能会使文件处于损坏状态。防范这种情况的一种方法是使<代码>进程<代码>可以在进度事务中回滚的数据库的客户端。< /P>
一般来说,不合作地和安全地终止某个东西是非常非常困难的。

一个后果是,一个不推荐的方法可能会从将来的版本中删除,从而导致代码无法编译/无法命名。简短回答:决不。@TheBat。中断没有取代
停止
。它是从那个地方来的beginning@bradvido关于停止第三方库:您可以创建单独的进程“我需要保证它在5分钟或更短时间内结束”无法“保证”此功能。“使用Thread.stop()的实际后果是什么?我如何确定它们是否发生?”这就是问题所在!没有办法知道,因为功能尚未定义。它可能会让其他线程运行,mist可能会让资源处于打开状态,它可能会维护对不会被垃圾收集的对象的强引用,只是没有办法知道,这就是为什么您不应该使用它…很难,但并非不可能。像Z/OS这样的操作系统可以做到这一点。诸如CICS之类的事务监视器执行此操作。诸如DB/2之类的DBMS系统可以做到这一点。在所有情况下,因为这些系统的管理员需要杀死失控进程的功能。