当java锁被锁定时,它被另一个线程锁定

时间:2016-01-19 17:21:54

标签: java multithreading java.util.concurrent

我对所发生这种情况的原因一无所知。我试图做的是让一个线程做一些工作,然后另一个线程处理该工作的结果,当它完成后,第一个线程重新开始行动。因此,我给两个线程都提供了对单个ReentrantLock的引用。第一个线程将其锁定,执行其工作,然后释放它并休眠几毫秒,让另一个线程获取锁定并完成其工作,然后继续该过程。

问题在于,当第二个线程锁定时,锁定仍被第一个锁定。我无法弄清楚原因。我写了一个简单的类来尝试重新创建场景,但一切都按预期进行。我也查看了我的代码,并且我没有意外地释放锁。我也尝试用new Semaphore(1)替换锁定,同样的事情发生了。

以下是日志中的相关行:

12204 [Thread-2] DEBUG AggregatedEventProducerThread:37 - Attempting to acquire lock java.util.concurrent.locks.ReentrantLock@43e36bfa[Unlocked]. Timestamp 1453223023635
12204 [Thread-2] DEBUG AggregatedEventProducerThread:39 - Lock acquired at 1453223023636. java.util.concurrent.locks.ReentrantLock@43e36bfa[Locked by thread Thread-2]
12564 [Thread-5] DEBUG CoordinatorState:151 - Attempting to acquire lock java.util.concurrent.locks.ReentrantLock@43e36bfa[Locked by thread Thread-2]. Timestamp 1453223023995
13454 [Thread-5] DEBUG CoordinatorState:154 - Lock java.util.concurrent.locks.ReentrantLock@43e36bfa[Locked by thread Thread-5] acquired at 1453223024886.
23915 [Thread-5] DEBUG CoordinatorState:161 - Lock java.util.concurrent.locks.ReentrantLock@43e36bfa[Unlocked] released at 1453223035346.
28458 [Thread-2] DEBUG AggregatedEventProducerThread:45 - Lock released at 1453223039890. java.util.concurrent.locks.ReentrantLock@43e36bfa[Unlocked]

有什么想法吗?

0 个答案:

没有答案