【发布时间】:2016-06-11 14:22:11
【问题描述】:
Lock sharedLock = new ReentrantLock();
Condition condition = lock.newCondition();
主线程:
sharedLock.lock();
childThread.start();
condition.await(5, TimeUnit.SECONDS);
sharedLock.unlock();
子线程:
sharedLock.lock();
//do something, may take a long time
Thread.sleep(10);// sleep to simulate a long execution
condition.signal();
sharedLock.unlock();
假设子线程发送网络请求并等待响应,我希望主线程最多等待 5 秒,如果超时,重试请求。但是当await()超时时,由于子线程仍然持有它,它无法获取锁,所以它仍然等待锁,直到子线程释放它,这需要10秒。
如何实现我的要求,即主线程等待子线程的信号,但有一个有界的超时?
【问题讨论】:
-
您是否需要使用
Lock和Condition(例如在作业中)?有比在锁和条件之外构建这样一个尝试最多的机制更简单的解决方案。 -
sharedLock 的用途是什么?你想用它来防止什么?
-
@NicolasFilotto 我想使用信号并等待。 condition.await和condition.signal必须和lock一起使用,否则不能调用await和signal方法。
-
@zapl 我需要一个超时重试机制,除了使用自旋锁之外,你还有其他解决方案吗(比如 while(!isFinished && waitedTime
-
这不是我的问题我知道什么是锁,我不知道/不知道你想用它做什么
标签: java multithreading concurrency mutex