关于wait与notify的唤醒问题 本帖最后由 c0010012255 于 2011-05-01 15:21:57 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你自己都wait了怎么调用notify呢? 此言差矣 wait是写在run方法里面的 并不影响主线程继续向下执行 线程在run方法里获得了锁,此时调用wait方法,但锁仍然被持有;如果调用notifyself() 方法需要获得锁,但此时锁没有被释放,所以无法执行到notify方法. 第一种是行的,wt启动线程后释放锁,进入lock的wait set,等待其他获得lock的锁的线程来唤醒它。之所以看不到wt启动的线程被main线程唤醒是因为基本上每次都是wt.notifyself()被执行后wt启动的线程才得到执行,此时已经没有线程去唤醒它了,所以办法就是让wt启动的线程跑起来了,然后main线程又还有机会执行wt.notifyself(),所以可以在wt.start()后面加上一个Thread.sleep(100);如果当前正在执行的线程是main,让他先睡会,让wt启动的线程先执行,进入wait set,然后大概100ms过后main唤醒它;还有一种也可以这样了:while(true){ wt.notifyself(); if(wt.isAlive() == false) break;} 调用wait方法会释放锁,进入wait set。 的确 wt.start()线程不一定会被执行 很可能先执行了后面的语句 我就说怎么测试时候会出现小概率被唤醒的情况 原来是这样 非常感谢 Java中 HttpUrlConnection 与 Socket 连接的异同 POI如何 改变 单元格内容的左右对齐方式?? 一个String 转char的问题(16进制)急 求corejava包 高人指路。。。 很简单的几行代码 操作excel表格,poi与jxl哪个更好 JAVA开发工具 请问jdk哪有得下载??一个java初学者。 如何获取Java.awt的父组件和子组件? 一个接口的问题 网络IO流的练习程序
之所以看不到wt启动的线程被main线程唤醒是因为基本上每次都是wt.notifyself()被执行后wt启动的线程才得到执行,此时已经没有线程去唤醒它了,所以办法就是让wt启动的线程跑起来了,然后main线程又还有机会执行wt.notifyself(),所以可以在wt.start()后面加上一个Thread.sleep(100);如果当前正在执行的线程是main,让他先睡会,让wt启动的线程先执行,进入wait set,然后大概100ms过后main唤醒它;还有一种也可以这样了:
while(true){
wt.notifyself();
if(wt.isAlive() == false)
break;
}