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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张炜

黑马帝

  • 黑马币:0

  • 帖子:45

  • 精华:0

© 张炜 黑马帝   /  2011-7-18 00:02  /  2037 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2条线程可以写synchronized然后用wait和notify进行轮换交替运行。那超过2条线程该如何处理。API上写notify是唤醒在此对象监视器上等待的单个线程,也就是随即唤醒的。如果对象监视器上的线程超过2条,如何指定该唤醒的是哪一条呢。

4 个回复

正序浏览
黑马网友  发表于 2011-7-19 00:41:14
板凳
1.5版本,Java.util.concurrent.locks包中提供了一个借口Lock,替代了synchronized
Synchronized,使用的是隐式的锁,lock是显式的锁.
这种新方法最大的好处是,在一个lock锁上可以添加多组监视器对象,这样就可以实现本方只唤醒对方的线程,而不会唤醒本方的线程。
Lock lock = new ReentrantLock();                创建锁
lock.lock()                                上锁
Condition proCon = lock.newCondition()        在锁lock上创建监视器proCon
Condition cutCon = lock.newCondition()             在索lock上创建监视器cutCon
proCon.await()        使pro(本方)线程进入等待
cutCon.signal()        唤醒cut(对方)线程
Lock.unlock()        解锁(通常放在finally中)

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
可以用Lock、Condition来实现。Condition可以建立多个条件
     用Lock来实现多个线程的同步,内部可以用condition来实现线程的交替运行,
condition内部有await()方法,可以替换wait方法,用signal方法代替notify方法。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 是不是看过张孝祥老师的视频呀。

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 10:49:56
沙发
排序的  相当于一个队列...先进先出
不过像操作系统的线程优先级有各种优先级算法...
回复 使用道具 举报
黑马网友  发表于 2011-7-18 00:21:26
楼主

回复 楼主 的帖子

notify应该是通知第一个进入wait的那个线程
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马