【发布时间】:2013-11-30 21:21:34
【问题描述】:
假设有三组线程。让我们说 A、B 和 C。
我想在 A 和 B 类型线程之间发生阻塞的方法中创建代码块,在包括阻塞部分在内的方法调用的所有情况下都允许 C 线程。
换句话说,如果 A 类型的线程在阻塞的代码部分,B 被阻塞但 C 没有被阻塞。
您知道是否可以这样做吗?如果是这样,如何做到这一点?
【问题讨论】:
-
你这样做的原因是什么?
-
听起来是个坏主意。锁不仅是为了互斥;它们还提供了确保跨线程可见性的内存屏障。如果 C 组线程与 A 和 B 线程共享任何数据,您仍然需要一个内存屏障。如果您真正需要的是
ReadWriteLock,我不会感到惊讶。 -
我的问题与实际案例问题无关,而是我将来可能遇到的可能情况。
-
你不会遇到这个问题。锁要么需要为所有线程发生,要么根本不需要发生,因为锁的目的是防止多重访问。有意义的是读/写锁之类的东西,因此是基于使用情况的锁定。
标签: java multithreading blocking nonblocking