当前位置:嗨网首页>书籍在线阅读

32-避免使用已弃用的方法

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.11 避免使用已弃用的方法

Java 并发API也有一些已弃用的操作。虽然API的第一版引入了这些操作,但是现在不应该继续使用它们了。新版的API实现了更佳的实践,已经取代了这些已弃用的操作。

Thread 类提供了如下一些危险的已弃用操作。

  • destroy() :过去,这个方法用于销毁线程。实际上,它抛出一个 NoSuchMethodError
  • suspend() :这个方法挂起线程的执行。
  • stop() :该方法强制结束线程。
  • resume() :该方法恢复已挂起线程的执行。

ThreadGroup 类也包含一些方法,具体如下所示。

  • suspend() :这个方法挂起线程组中的所有线程。
  • stop() :这个方法强制结束线程组中的所有线程。
  • resume() :这个方法恢复线程组中所有已挂起线程的执行。

stop() 操作被弃用是因为它能够引发不一致错误。由于它强制结束线程,因此在操作完成之前,线程就可能结束,这将导致数据处于不一致的状态。如果一个线程正在修改银行账户,还没完成就停止了,那么这个银行账户将可能出现错误的数据。

stop() 也可能引发死锁。在调用它时,如果线程正处于同步机制(比如一个Lock)所保护的临界区内,那么同步机制将继续阻塞,没有其他线程能够进入这个临界区。这同样也是 suspend()resume() 被弃用的原因。

作为这些操作的一种替代方案,可以使用一个存储了线程状态的内部属性,然后通过同步访问机制保护该属性,或者使用原子变量。在采取操作前必须检查该属性值,然后根据检查结果采取相应的操作。请注意要避免数据不一致和死锁问题,保证应用程序的正确性。