解决Java的wait(long mills)方法不能区分其返回是由于超时还是被唤醒的问题
2021-04-08 01:27
标签:div OLE iter 返回值 thread begin ati wait amp wait(long mills) 没有返回值,所以区分不了其返回是由于超时还是被唤醒,因此需要引入一个布尔变量,来表示它的返回类型。 解决Java的wait(long mills)方法不能区分其返回是由于超时还是被唤醒的问题 标签:div OLE iter 返回值 thread begin ati wait amp 原文地址:https://www.cnblogs.com/yuanyb/p/13380065.htmlclass WaitTimeOut {
private volatile boolean ready = false; // 如果是true,则表示是被唤醒
public synchronized void notify0() {
ready = true;
notify();
}
public synchronized void wait0(long mills) throws InterruptedException {
long begin = System.currentTimeMillis();
long rest = mills;
if (rest == 0L) {
wait(0);
} else {
while (!ready && rest > 0) { // 如果被唤醒(ready为true),或超时(rest {
try {
waiter.wait0(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
pool.execute(waiter::notify0);
}
}
下一篇:DQL 语言 --常见函数
文章标题:解决Java的wait(long mills)方法不能区分其返回是由于超时还是被唤醒的问题
文章链接:http://soscw.com/index.php/essay/72643.html