为什么要弃用stop和suspend方法

JDK1.0定义了stop和suspend方法,前者用来直接总之线程,后者会阻塞线程直到另一个线程调用resume.
   stop和suspend都有一些共同的点:都试图专横的控制一个给定线程的行为.

  
   从JDK1.2开始,这两个方法都被弃用了.stop天生就不安全,而经验告诉我们呢suspend方法会经常导致死锁。


   我们首先来看看stop方法.这个方法将终止所有未结束的方法,包括run方法。当一个线程停止时候,他会立即释放所有他锁住对象上的锁。这会导致对象处于不一致的状态。假如一个方法在将钱从一个账户转移到另一个账户的过程中,在取款之后存款之前就停止了。那么现在银行对象就被破坏了。因为锁已经被释放了,这种破坏被那些未停止的线程观察到。


   当线程想终止另一个线程的时候,它无法知道何时调用stop是安全的,何时会导致对象被破坏。所以这个方法被弃用了。你应该中断一个线程而不是停止他。被中断的线程会在安全的时候停止。


  
   那suspend方法会发生什么问题。和stop不同,suspend不会破坏对象。但是,如果你用一个suspend挂起一个有锁的线程,那么在锁恢复之前将不会被释放。如果调用suspend的方法线程试图取得相同的锁,程序就会死锁。被挂起的线程等待恢复,而挂起他的线程等待或的锁。 这种状况在图形界面中经常发生。


 
   那么在程序中该怎么样使用线程呢?建议如下:
  
   (1)最好不要使用Lock/Condition也不使用synchronized关键字。在很多情况下你可以使用java.util.concurrent包中的一种机制,它会为你处理所有的加锁。例如阻塞同步队列。
  
  (2)如果synchronized关键字在程序中可以工作,那么就尽量使用它,这样可以减少代码数量和出错的几率。
  
  (3)只有在非常需要Lock/Condition结构特性的时候才使用他们。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tom_221x/archive/2008/11/07/3248154.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值