我有一个在线程之间共享的 ReentrantLock 对象,但我可以通过不同的线程锁定同一个对象。这似乎不对,因为它们是不同的线程。这是截断/简化的输出:
11:04:47,136 [http-bio-8080-exec-9] INFO CamTask - ABOUT TO LOCK..... java.util.concurrent.locks.ReentrantLock@4462cf1d[Unlocked] -- 0
11:04:47,136 [http-bio-8080-exec-9] INFO CamTask - GOT LOCK java.util.concurrent.locks.ReentrantLock@4462cf1d[Locked by thread http-bio-8080-exec-9] -- 1
// ... //
11:04:48,244 [Camel thread #1] INFO MyProcessor - ABOUT TO LOCK... java.util.concurrent.locks.ReentrantLock@4462cf1d[Unlocked] -- 0
11:04:48,245 [Camel thread #1] INFO MyProcessor - GOT LOCK java.util.concurrent.locks.ReentrantLock@4462cf1d[Locked by thread Camel thread #1] -- 1
// ... //
11:04:48,280 [Camel thread #1] INFO MyProcessor - ABOUT TO UNLOCK.. java.util.concurrent.locks.ReentrantLock@4462cf1d[Locked by thread Camel thread #1] -- 1
11:04:48,280 [Camel thread #1] INFO MyProcessor - UNLOCKED. java.util.concurrent.locks.ReentrantLock@4462cf1d[Unlocked] -- 0
// ... //
11:04:48,284 [http-bio-8080-exec-9] INFO CamTask - ABOUT TO UNLOCK..... java.util.concurrent.locks.ReentrantLock@4462cf1d[Locked by thread http-bio-8080-exec-9] -- 1
11:04:48,284 [http-bio-8080-exec-9] INFO CamTask - UNLOCKED. java.util.concurrent.locks.ReentrantLock@4462cf1d[Unlocked] -- 0
我的日志记录结构如下:
log.info("ABOUT TO LOCK.. "+lock+" -- "+lock.getHoldCount());
lock.lock();
log.info("GOT LOCK "+lock+" -- "+lock.getHoldCount());
如你看到的:
- [http-bio-8080-exec-9] 锁定(保持计数为 0,然后按预期锁定后为 1)
- [Camel thread #1] 锁定(为什么这可能因为 [http-bio-8080-exec-9] 尚未解锁?)
MyProcessor 被调用作为消息到达队列的结果。该lock
对象在其构造函数中传递给 MyProcessor。当我在上面的日志中打印出锁定对象时,您可以看到它是同一个对象(具有相同的参考 ID)。
有任何想法吗?
谢谢!