社区
Java SE
帖子详情
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
打赏
收藏
java多线程问题(wait(time))
Object synObject=new Object(); 线程1调用 synObject.wait(400); 线程2调用 synObject.notify();在很接近400微秒时 这时后线程1返回,可是我怎样才知道线程1是由于线程2中调用notify();而返回的,还是由于等代时间已到而返回的.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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决定,程序员是没有办法确切地知道线程的运行情况的。
Java
多线程
系列之
wait
前言 我们知道让线程阻塞除了可以调用sleep方法,join方法还有
wait
方法,前两个是属于Tread的方法,而
wait
是属于Object的方法,今天就来聊一聊
wait
的用法。 先看一看
wait
的三个重载方法 public final void
wait
() throws InterruptedException public final void
wait
(long
time
out) throws InterruptedException public final void
wait
(long
JAVA
多线程
基础篇-线程通信(
wait
/notify)
在
JAVA
多线程
中,线程通信是重要概念之一。线程通信能够使系统之间的交互性更强大,在大大提高CPU利用率的同时还会使程序员对各线程在任务处理过程中进行有效把控。本文将针对使用
wait
/notify进行线程之间通信进行分析,详述其实现过程、原理以及相关注意事项。.........
Java
多线程
:
wait
()和notify()/notifyAll()
notify()的作用是,如果有多个线程等待,那么线程规划器随机挑选出一个
wait
的线程,对其发出通知notify(),并使它等待获取该对象的对象锁。注意"等待获取该对象的对象锁",这意味着,即使收到了通知,
wait
的线程也不会马上获取对象锁,必须等待notify()方法的线程释放锁才可以。和
wait
()一样,notify()也要在同步方法/同步代码块中调用。当然,唤醒的顺序不重要,因为notifyAll()把处于同一资源下
wait
的线程全部唤醒,至于唤醒的顺序,就和线程启动的顺序一样,是虚拟机随机的。
Java
多线程
之
wait
和notify详解以及实现阻塞队列
本文是
Java
多线程
的学习,详细介绍了
wait
()和notify()的用法、条件变量Condition,以及什么是阻塞队列,如何实现它?之后的学习内容将持续更新!!!
Java
多线程
基础-7:
wait
() 和 notify() 用法解析
详解
Java
多线程
编程中,
wait
()和notify()方法的使用方式和注意事项,配合代码案例~
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章