Java进阶:Java多线程编程之不...来源: 发布时间:星期三, 2008年12月17日 浏览:21次 评论:0
不提倡使用思路方法是为支持向后兼容性而保留那些思路方法它们在以后版本中可能出现也可能不出现Java 多线程支持在版本 1.1 和版本 1.2 中做了重大修订stop、suspend 和 resume 已不提倡使用这些在 JVM 中可能引入微妙虽然名可能听起来很诱人但请抵制诱惑不要使用它们
调试线程化 在线程化中可能发生某些常见而讨厌情况是死锁、活锁、内存损坏和资源耗尽 死锁 死锁可能是多线程最常见问题当个线程需要个资源而另个线程持有该资源锁时就会发生死锁这种情况通常很难检测但是解决方案却相当好:在所有线程中按相同次序获取所有资源锁例如如果有 4个资源 —A、B、C 和 D — 并且个线程可能要获取 4个资源中任何个资源锁则请确保在获取对 B 锁的前首先获取对 A 锁依此类推如果“线程 1”希望获取对 B 和 C 锁而“线程 2”获取了 A、C 和 D 锁则这技术可能导致阻塞但它永远不会在这 4个锁上造成死锁 活锁 当个线程忙于接受新任务以致它永远没有机会完成任何任务时就会发生活锁这个线程最终将超出缓冲区并导致崩溃试想个秘书需要录入封信但她直在忙于接电话所以这封信永远不会被录入 内存损坏 如果明智地使用 synchronized 关键字则完全可以避免内存这种气死人问题 资源耗尽 某些系统资源是有限如文件描述符多线程可能耗尽资源每个线程都可能希望有个这样资源如果线程数相当大或者某个资源侯选线程数远远超过了可用资源数则最好使用 资源池个最好举例是数据库连接池只要线程需要使用个数据库连接它就从池中取出个使用以后再将它返回池中资源池也称为 资源库 调试大量线程 有时个有大量线程在运行而极难调试在这种情况下下面这个类可能会派上用场: 以下是引用片段: public Probe extends Thread { public Probe {} public void run { while(true) { Thread x = Thread[100]; 0
相关文章读者评论
发表评论 |