You may have helper lock methods:
private final ReentrantLock mLock = new ReentrantLock();
void conditionalLock() {
ThreadGroup group = Thread.currentThread().getThreadGroup();
if (group.equals(groupA) || group.equals(groupB)) {
mLock.lock();
}
}
Change the changed / simplified state as suggested by erickson
void conditionalUnlock() {
if (mLock.isHeldByCurrentThread()) {
mLock.unlock();
}
}
:
conditionalLock();
try {
} finally {
conditionalUnlock();
}