JAVA STOP方法的不安全性
来源:互联网 发布:中国域名管理机构 编辑:程序博客网 时间:2024/06/11 21:30
@Deprecated
public final void stop()
已过时。 该方法具有固有的不安全性。用 Thread.stop 来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 ThreadDeath 异常的一个自然后果)。如果以前受这些监视器保护的任何对象都处于一种不一致的状态,则损坏的对象将对其他线程可见,这有可能导致任意的行为。stop 的许多使用都应由只修改某些变量以指示目标线程应该停止运行的代码来取代。目标线程应定期检查该变量,并且如果该变量指示它要停止运行,则从其运行方法依次返回。如果目标线程等待很长时间(例如基于一个条件变量),则应使用 interrupt 方法来中断该等待。有关更多信息,请参阅《为何不赞成使用 Thread.stop、Thread.suspend 和 Thread.resume?》。
强迫线程停止执行。
如果安装了安全管理器,则以 this 作为其参数调用 checkAccess 方法。这可能引发 SecurityException(在当前线程中)。
如果该线程不同于当前线程(即当前线程试图终止除它本身以外的某一线程),则安全管理器的 checkPermission 方法(带有 RuntimePermission("stopThread") 参数)也会被调用。这会再次抛出 SecurityException(在当前线程中)。
无论该线程在做些什么,它所代表的线程都被迫异常停止,并抛出一个新创建的 ThreadDeath 对象,作为异常。
停止一个尚未启动的线程是允许的。如果最后启动了该线程,它会立即终止。
应用程序通常不应试图捕获 ThreadDeath,除非它必须执行某些异常的清除操作(注意,抛出 ThreadDeath 将导致 try 语句的 finally 子句在线程正式终止前执行)。如果 catch 子句捕获了一个 ThreadDeath 对象,则重新抛出该对象很重要,因为这样该线程才会真正终止。
对其他未捕获的异常作出反应的顶级错误处理程序不会打印输出消息,或者另外通知应用程序未捕获到的异常是否为 ThreadDeath 的一个实例。
抛出:
SecurityException - 如果当前线程不能修改该线程。
另请参见:
interrupt(), checkAccess(), run(), start(), ThreadDeath, ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable), SecurityManager.checkAccess(Thread), SecurityManager.checkPermission(java.security.Permission)
- JAVA STOP方法的不安全性
- Java stop()和suspend()方法为何不推荐使用
- 为什么java线程不推荐调用stop,suspend,resume方法
- SimpleDateFormat线程不安全性的三种方法解决
- java中俩种方法实现一个线程,以及不推荐使用stop()和suspend()方法
- 为什么不使用suspend和stop方法
- Java学习 - Thread的Stop方法以及替换实现
- java线程的suspend()、stop()方法废弃原因
- java 线程中 stop()和 suspend()方法为何不推荐使用?
- Java中为什么不推荐使用stop()和suspend()方法
- [Java]stop()不能用,如何停止线程?
- 关于jquery 的stop()方法
- 证明堆的不安全性
- php的线程不安全性
- SimpleDateFormat的线程不安全性
- HashMap的线程不安全性
- 线程的最佳实践二:不使用stop方法停止线程
- 不使用stop方法停止线程,停止线程的最佳办法
- 如何修改FLASH动画
- 【DP】饥饿的牛
- Ext树级联选中父节点和子节点
- PowerPoint2007不能输入中文的问题
- poj 1018
- JAVA STOP方法的不安全性
- zigbee协议与开发-NWK层作用解析
- Putty中文乱码解决方法
- svn防止提交错误文件的方法
- web 测试要点
- 关于网络学习
- 如何简单的在JSP里实现乘法口诀表
- SVM学习(五):松弛变量与惩罚因子
- JAVA线程的缺陷