java多线程问题(wait(time))

yinzhaohui 2004-07-26 03:48:32
Object synObject=new Object();

线程1调用
synObject.wait(400);

线程2调用
synObject.notify();在很接近400微秒时

这时后线程1返回,可是我怎样才知道线程1是由于线程2中调用notify();而返回的,还是由于等代时间已到而返回的.





...全文
281 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinzhaohui 2004-07-26
  • 打赏
  • 举报
回复
hq1305018(跃强)
你在notify上设置标志位为true,在什么时候恢复这个标志位了(是在wait等待返回过后吗?)
yinzhaohui 2004-07-26
  • 打赏
  • 举报
回复
ChDw(米)对我也是这样作的(如果是notify的返回true,如果是时间到了返回false)
private synchronized boolean P(long waittime)
{
if(--curSemaphore<0)
{
try
{
long curtime=System.currentTimeMillis();
wait(waittime);
long delay=System.currentTimeMillis()-curtime;
if(delay>=waittime)
{
if(curSemaphore<maxSemaphore)
curSemaphore++;
return false;
}
return true;
}
catch(InterruptedException e)
{
return false;
}
}
return true;
}
可是不确定性会带来很大的问题
ChDw 2004-07-26
  • 打赏
  • 举报
回复
这种情况的确不一定能够绝对的判断出来,但是一个折衷的方法是
在synObject.wait(400);的catch InterruptedException语句中,判断
System.currentTimeMillis() - starttime >= _maxWait如果是,则认为是超时,否则就是
被唤醒
draco2002 2004-07-26
  • 打赏
  • 举报
回复
JAVA里的线程有很大的不确定性,它个操作平台有很大关系!
hq1305018 2004-07-26
  • 打赏
  • 举报
回复
做一个boolean的标记,在notify之前将标记置true。
qqbz 2004-07-26
  • 打赏
  • 举报
回复
无法,线程控制由jvm决定,程序员是没有办法确切地知道线程的运行情况的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧