呵呵,没有见过不能唤醒的情况,除非你调用requestResume的时候正在dosomething里,还没有开始wait你可以用其他方法补偿,例如检测一个列表。
解决方案 »
- JTREE做类似QQ那种头像抖动
- 关于socekt的一个小例子,但好像有点问题,大家帮我看看
- 请问这个用什么类来实现?
- 请教关于import和packagede使用问题
- 在哪里下载Lomboz 2.1.1版本?我在http://www.objectlearn.com上找不到。
- 那里有jdk最新下载?
- java如何在栈内存中分配数组?
- [公告]撤销sharetop的版主职务
- 请问:如果用java做一个通讯小软件,用面向连接的socket还是用数据报传输的socket好?
- java多线程中使用同步那它和单线程有什么区别?
- 初学java问题1:)请问下面两句话是什么意思?
- SOCKET 服务端程序获取客户端传来的BYTE流 如何获取其长度
try{
wait();
}catch(Exception e){
}不就行了
应该不是死锁。因为它在大多时候都运行正常,而且他们线程之间并没有什么共享资源,不会因为某个线程在等待资源而发生死锁。
to fastmask(我心烦) ( ):
在其他线程里,有做判断TestThread是否是在dosomething(在使用这个线程前,TestThread.setBusy();
调用requestResume的时候正在dosomething里
public void run(){
while(run){
//1.do something
...
//2.suspended
requestSuspended();
}
setIdle();
}
public void setBusy(){}
private Object obj = new Object();
public TestThread(){
}
public void run(){
while(run){
//1.do something
...
//2.suspended
requestSuspended();
}
}
private void requestSuspended(){
synchronized(obj)
try{
wait();
}catch(Exception e){
}
}
} public void requestResume(){
synchronized(obj) {
notify();
}
}
}
private boolean runFlag = true; public TestThread() {} public void run(){
while(!runFlag){
//1.do something
...
//2.suspended
try {
wait();
} catch (InterruptedException e){
System.err.println("Interrupted");
}
}
}
public void requestResume(){
synchronized (this) {
this.notify();
}
}
}