假设有三组线程。让我们说A,B和C.
我想在A和B类型线程之间发生阻塞的方法中创建代码块,在方法调用的所有情况下都允许使用C线程,包括阻塞部分。
换句话说,如果A类型的线程在阻塞的代码部分中,则B被阻止但C不被阻止。
您是否有可能做到这一点?如果是这样的话怎么办?
答案 0 :(得分:4)
您可以使用辅助锁定方法:
private final ReentrantLock mLock = new ReentrantLock();
void conditionalLock() {
ThreadGroup group = Thread.currentThread().getThreadGroup();
if (group.equals(groupA) || group.equals(groupB)) {
mLock.lock();
}
}
编辑更改/简化条件 erickson
void conditionalUnlock() {
if (mLock.isHeldByCurrentThread()) {
mLock.unlock();
}
}
然后,在同一类的方法中:
conditionalLock();
try {
// block you want to synchronize between threads of group A & B
} finally {
conditionalUnlock();
}
答案 1 :(得分:1)
也许这是一种丑陋的方式,但我有一个想法。
您可以为您的Threads
命名并执行if语句检查名称(线程类型)。
if (Thread.currentThread().getName().contains("A") || Thread.currentThread().getName().contains("B")){
synchronized(this){
//do stuff
}
}else{
//do stuff or even check if its type C
}