黑马程序员技术交流社区

标题: 多条线程如何交替运行 [打印本页]

作者: 张炜    时间: 2011-7-18 00:02
标题: 多条线程如何交替运行
2条线程可以写synchronized然后用wait和notify进行轮换交替运行。那超过2条线程该如何处理。API上写notify是唤醒在此对象监视器上等待的单个线程,也就是随即唤醒的。如果对象监视器上的线程超过2条,如何指定该唤醒的是哪一条呢。
作者: 匿名    时间: 2011-7-18 00:21
标题: 回复 楼主 的帖子
notify应该是通知第一个进入wait的那个线程
作者: 匿名    时间: 2011-7-18 10:49
排序的  相当于一个队列...先进先出
不过像操作系统的线程优先级有各种优先级算法...
作者: 孙朋帅    时间: 2011-7-18 11:08
可以用Lock、Condition来实现。Condition可以建立多个条件
     用Lock来实现多个线程的同步,内部可以用condition来实现线程的交替运行,
condition内部有await()方法,可以替换wait方法,用signal方法代替notify方法。
作者: 匿名    时间: 2011-7-19 00:41
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中)




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