为什么不推荐使用stop和suspend这两个方法?
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/08 14:52:13
为什么不推荐使用stop和suspend这两个方法?
stop和suspend都有一些共同的点:都试图专横的控制一个给定了的线程的行为.
从JDK1.2开始,这两个方法都被弃用了.stop天生就不安全,而经验告诉我们呢suspend方法会经常导致死锁. stop这个方法将终止所有未结束的方法,包括run方法.当一个线程停止时候,他会立即释放所有他锁住对象上的锁.这会导致对象处于不一致的状态.假如一个方法在将钱从一个账户转移到另一个账户的过程中,在取款之后存款之前就停止了.那么现在银行对象就被破坏了.因为锁已经被释放了.当线程想终止另一个线程的时候,它无法知道何时调用stop是安全的,何时会导致对象被破坏.所以这个方法被弃用了.你应该中断一个线程而不是停止他. suspend不会破坏对象.但是,如果你用一个suspend挂起一个有锁的线程,那么在锁恢复之前将不会被释放.如果调用suspend的方法线程试图取得相同的锁,程序就会死锁.那么在程序中该怎么样使用线程呢?建议如下:
(1)最好不要使用Lock/Condition也不使用synchronized关键字.在很多情况下你可以使用java.util.concurrent包中的一种机制,它会为你处理所有的加锁.例如阻塞同步队列.
(2)如果synchronized关键字在程序中可以工作,那么就尽量使用它,这样可以减少代码数量和出错的几率.
从JDK1.2开始,这两个方法都被弃用了.stop天生就不安全,而经验告诉我们呢suspend方法会经常导致死锁. stop这个方法将终止所有未结束的方法,包括run方法.当一个线程停止时候,他会立即释放所有他锁住对象上的锁.这会导致对象处于不一致的状态.假如一个方法在将钱从一个账户转移到另一个账户的过程中,在取款之后存款之前就停止了.那么现在银行对象就被破坏了.因为锁已经被释放了.当线程想终止另一个线程的时候,它无法知道何时调用stop是安全的,何时会导致对象被破坏.所以这个方法被弃用了.你应该中断一个线程而不是停止他. suspend不会破坏对象.但是,如果你用一个suspend挂起一个有锁的线程,那么在锁恢复之前将不会被释放.如果调用suspend的方法线程试图取得相同的锁,程序就会死锁.那么在程序中该怎么样使用线程呢?建议如下:
(1)最好不要使用Lock/Condition也不使用synchronized关键字.在很多情况下你可以使用java.util.concurrent包中的一种机制,它会为你处理所有的加锁.例如阻塞同步队列.
(2)如果synchronized关键字在程序中可以工作,那么就尽量使用它,这样可以减少代码数量和出错的几率.
为什么 Thread.stop和Thread.suspend等被废弃了?
下列哪些是Thread类的静态方法:run();start();stop();suspend();resume();sl
Halt,Stop,Cease,Suspend的不同以及搭配用法
suspend和dangle,sway和roll
练字两个月了;没有一点进步是方法不对吗,求推荐款科学又快速的练字方法
一个电流表如果用3和0.6这两个接线柱读数,不使用+接线柱怎么读数
为什么这两个介词连在一起使用呢?
意大利为什么不灭掉梵蒂冈和圣马力诺这两个小国?
为什么不使用0度经线和180度纬线
玉树地震时,用一种使用悬挂磁铁预测地震方法为什么不可行
这句话为什么stop后面,work要加ing?不加不可以吗?
为什么不能用蒸馏的方法分离苯酚和苯甲酸