Explore Connect Documentation
Snippets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.concurrent.locks.ReentrantLock;
class NonReentrantLockExample {
  private final ReentrantLock lock = new ReentrantLock();
  
  public void foo() throws InterruptedException {
    assert !lock.isHeldByCurrentThread() :
      "lock is held by current thread";
    lock.lock();
    try {
      // ...
      threadUnsafeBar();
    } finally {
      lock.unlock();
    }
  }
  
  public void bar() throws InterruptedException {
    assert !lock.isHeldByCurrentThread() :
      "lock is held by current thread";
    lock.lock();
    try {
      threadUnsafeBar();
    } finally {
      lock.unlock();
    }
  }
  
  private void threadUnsafeBar() {
    assert lock.isHeldByCurrentThread() :
      "caller must hold the lock first";
    // ...
  }
}
public class Main {
  public static void main(String args[]) throws Exception {
    new NonReentrantLockExample().foo();
  }
}
Press desired key combination and then press ENTER.