java挂起和恢复线程的api为何废弃
2016-07-07 22:32
337 查看
Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件——其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁。另外,在长时间计算期间挂起线程也可能导致问题。
下面我们给出不用上述两个方法来实现线程挂起和恢复的策略——设置标志位。通过该方法实现线程的挂起和恢复有一个很好的地方,就是可以在线程的指定位置实现线程的挂起和恢复,而不用担心其不确定性。
总结:线程的挂起和恢复实现的正确方法是:通过设置标志位,让线程在安全的位置挂起
当调用Thread的start()方法,执行完run()方法后,或在run()方法中return,线程便会自然消亡。另外Thread API中包含了一个stop()方法,可以突然终止线程。但它在JDK1.2后便被淘汰了,因为它可能导致数据对象的崩溃。一个问题是,当线程终止时,很少有机会执行清理工作;另一个问题是,当在某个线程上调用stop()方法时,线程释放它当前持有的所有锁,持有这些锁必定有某种合适的理由——也许是阻止其他线程访问尚未处于一致性状态的数据,突然释放锁可能使某些对象中的数据处于不一致状态,而且不会出现数据可能崩溃的任何警告。
终止线程的替代方法:同样是使用标志位,通过控制标志位来终止线程。
下面我们给出不用上述两个方法来实现线程挂起和恢复的策略——设置标志位。通过该方法实现线程的挂起和恢复有一个很好的地方,就是可以在线程的指定位置实现线程的挂起和恢复,而不用担心其不确定性。
总结:线程的挂起和恢复实现的正确方法是:通过设置标志位,让线程在安全的位置挂起
当调用Thread的start()方法,执行完run()方法后,或在run()方法中return,线程便会自然消亡。另外Thread API中包含了一个stop()方法,可以突然终止线程。但它在JDK1.2后便被淘汰了,因为它可能导致数据对象的崩溃。一个问题是,当线程终止时,很少有机会执行清理工作;另一个问题是,当在某个线程上调用stop()方法时,线程释放它当前持有的所有锁,持有这些锁必定有某种合适的理由——也许是阻止其他线程访问尚未处于一致性状态的数据,突然释放锁可能使某些对象中的数据处于不一致状态,而且不会出现数据可能崩溃的任何警告。
终止线程的替代方法:同样是使用标志位,通过控制标志位来终止线程。
相关文章推荐
- Go 语言 Channel 实现原理精要
- Erlang并发编程介绍
- Java并发编程之性能、扩展性和响应
- Java并发编程之阻塞队列详解
- Java 并发编程学习笔记之核心理论基础
- Java并发编程示例(二):获取和设置线程信息
- Java并发编程示例(十):线程组
- Java并发编程示例(八):处理线程的非受检异常
- Java并发编程示例(六):等待线程执行终止
- Java并发编程示例(五):线程休眠与恢复
- Java 并发编程学习笔记之Synchronized简介
- Java并发编程之创建线程
- Java并发编程示例(九):本地线程变量的使用
- Java并发编程之栅栏(CyclicBarrier)实例介绍
- 实例讲解Java并发编程之ThreadLocal类
- Java并发编程示例(七):守护线程的创建和运行
- Java并发编程总结――慎用CAS详解
- 实例讲解Java并发编程之闭锁
- Java并发编程中构建自定义同步工具
- Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁