黑马程序员技术交流社区
标题:
关于多线程的等待唤醒机制,有些不懂...
[打印本页]
作者:
陈虹旭
时间:
2012-10-12 11:41
标题:
关于多线程的等待唤醒机制,有些不懂...
本帖最后由 陈虹旭 于 2012-10-14 12:15 编辑
while(true)
{
synchronized(r)
{
if(r.flag)
try{r.wait();}catch(Exception e){}
if(x==0)
{
r.name="mike";
r.sex="man";
}
else
{
r.name="丽丽";
r.sex = "女女女女女";
}
x = (x+1)%2;
r.flag = true;
r.notify();
}
}
复制代码
以上是第一个线程
while(true)
{
synchronized(r)
{
if(!r.flag)
try{r.wait();}catch(Exception e){}
System.out.println(r.name+"...."+r.sex);
r.flag = false;
r.notify();
}
}
复制代码
这是第二个线程
谁能给我解释下wait()和notify的具体实现流程啊 ,最好用一个简单的小例子说明下,看了视频好几遍了,还是看不明白,感觉好繁琐...
wai()和notify为什么不是Thread的子类而是Object的子类呢?
wait()和sleep()抛出的异常一般都如何解决呢?
还有notifyall()一般在什么情况下使用?
作者:
张忠豹
时间:
2012-10-12 12:38
谁能给我解释下wait()和notify的具体实现流程啊 ,最好用一个简单的小例子说明下,看了视频好几遍了,还是看不明白,感觉好繁琐...
简单例子:
妈妈煮饭没有油wait()一下,执行权交给儿子,儿子去打酱油,儿子打完酱油,notify()叫醒妈妈。执行权又回到妈妈手中。
wai()和notify为什么不是Thread的子类而是Object的子类呢?
你应该知道在使用wait()和notify()都会使用锁,即它们必须使用在synchronized代码块或者同步函数中。
wait()和sleep()抛出的异常一般都如何解决呢?
你看见有人处理IllegalMonitorStateException异常了吗,它是RuntimeException的子类,直接抛出就可以了,要是随便处理了,可能会隐藏问题。
还有notifyall()一般在什么情况下使用?
notifyAll()一般在多线程的状态下使用,且有的线程处在冻结状态,即线程不止一个。
作者:
徐梦侠
时间:
2012-10-12 13:38
楼上的例子举得不错。
wai()和notify为什么不是Thread的子类而是Object的子类?
因为等待和唤醒必须是同一个锁,而锁可以使任意对象,所以可以被任意对象调用的方法定义在Object类中。
notifyall() 的使用情况
多线程的时候,有时候需要唤醒所有线程,因为若用notify,容易出现只唤醒本方线程,而导致程序中其他所有线程等待的情况。
作者:
陈虹旭
时间:
2012-10-14 12:14
理解了 谢谢...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2