java中条件等待

虽然可以使用object的wait、notify,也仍然是很多人的选择;但是不便于把一组相关联的条件封装在一起。

用Lock和Condition则可以实现.

示例代码

Lock relaLock = new ReentrantLock();

Condition relaCondition1 = relaLock.newCondition();

Condition relaCondition2 = relaLock.newCondition();

Thread thread1 = new Thread(() -> {

long i = 0;

while (i++ < Long.MAX_VALUE) {

if (i % 100000000 != 0) {

continue;

}

System.out.println(“thread1 i:” + (i / 100000000));

if (i / 100000000 < 10) {//not wait condition

continue;

}

try {

relaLock.lock();

relaCondition1.await();

i=0;

} catch (InterruptedException ex) {

System.out.println(“thread flag:” + Thread.currentThread().isInterrupted());

} finally {

relaLock.unlock();

}

}

});

thread1.start();

Thread.sleep(10000L);

try {

relaLock.lock();

System.out.println(“relaCondition1 signal”);

relaCondition1.signalAll();

}finally {

relaLock.unlock();

}

thread1.join();

输出

thread1 i:1

thread1 i:2

thread1 i:3

thread1 i:4

thread1 i:5

thread1 i:6

thread1 i:7

thread1 i:8

thread1 i:9

thread1 i:10

relaCondition1 signal

thread1 i:1

thread1 i:2

thread1 i:3

thread1 i:4

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
上一篇 2022年6月30日 20:05
下一篇 2022年6月30日 20:05

相关推荐

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息