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()方法使用不当,就可能造成死锁。
|
|