黑马程序员技术交流社区

标题: 线程问题 和死锁问题 [打印本页]

作者: 熊猫宝宝    时间: 2015-6-11 14:45
标题: 线程问题 和死锁问题
1.如何获取 多个线程中的数据,并求和。

2.    死锁问题

l         同步线程很方便,当可能导致死锁。死锁是发生在线程间相互阻塞的现象,这种现象导致同步线程相互等待,以致都不能往下执行。两个线程对两个同步对象具有循环依赖时,就会发生死锁。例如:线程1进入对象X的监视器,线程2进入对象Y的监视器,这时,线程1又试图进入Y的监视器就会被阻隔,线程2要进入X的监视器也会被阻隔,这样两个线程就会处于挂起状态,让程序停滞不前。

l         前面说了Java中每个类都是Object扩展而来的,所以都可继承它的wait()方法和notify()方法,来解决死锁问题。这两个方法只能在synchronized方法中调用。一个线程无论是调用wait()还是notify方法,都必须得到该对象的锁旗标。这样,notify只能唤醒同一对象的wait。

l         wait()方法:它的作用是告诉当前线程放弃监视器并进入睡眠状态,直到其他线程进入同一监测器并调用notify被唤醒为止,如果一个线程没有被任何其他线程唤醒,则它将永远等下去。

l         notify()方法:这个方法用于通知一个等待的线程,某个对象的状态已经改变,唤醒同一对象监视器中调用wait的第一线程。

l         notifyAll:唤醒同一对象监视器中调用wait的所有线程,具有最高优先级的线程首先被唤醒并执行。

l         如果调用了wait()方法,就必须保证有一个匹配的notify()方法被调用,不然这个等待的线程将无休止的等待下去,因此,wait()和notify()方法使用不当,就可能造成死锁。


作者: 黄智    时间: 2015-6-11 15:16
给赞、学习。
作者: meng12    时间: 2015-6-11 15:26
学习啦!顶一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2