【发布时间】:2017-08-03 18:39:59
【问题描述】:
假设有 3 个线程 t1, t2, t3
我有这段代码(Condition con = lock.newCondition();):
lock.lock();
if (Thread.currentThread().getName().equals("t1"))
con.await();
if (Thread.currentThread().getName().equals("t2"))
con.signal();
lock.unlock();
t1 首先运行此代码,然后 t2 和 t3 在 lock.lock(); 中暂停。
t1执行con.await();后t2进入并执行con.signal();。
我的问题是信号之后谁会进入临界区?
是t1因为await()而被挂起还是t3在lock.lock();中挂起?
Oracles 文档指出:
如果有任何线程正在等待此条件,则选择一个 起来。该线程必须在返回之前重新获取锁 从等待。
从最后一句是不是说在 t1 苏醒后它与 t3 在锁上竞争?
如果是这样,可以保证t1,t3中的谁会进入吗?
假设我没有在 lock 的构造函数中传递 true(表示公平锁)。
【问题讨论】:
标签: java multithreading