A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊猫宝宝 中级黑马   /  2015-6-11 14:45  /  917 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

2 个回复

倒序浏览
给赞、学习。
回复 使用道具 举报
学习啦!顶一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马