45 lines
1.1 KiB
Java
45 lines
1.1 KiB
Java
// threads/MultiLock.java
|
|
// (c)2016 MindView LLC: see Copyright.txt
|
|
// We make no guarantees that this code is fit for any purpose.
|
|
// Visit http://mindviewinc.com/Books/OnJava/ for more book information.
|
|
// One thread can reacquire the same lock
|
|
|
|
public class MultiLock {
|
|
public synchronized void f1(int count) {
|
|
if(count-- > 0) {
|
|
System.out.println(
|
|
"f1() calling f2() with count " + count);
|
|
f2(count);
|
|
}
|
|
}
|
|
public synchronized void f2(int count) {
|
|
if(count-- > 0) {
|
|
System.out.println(
|
|
"f2() calling f1() with count " + count);
|
|
f1(count);
|
|
}
|
|
}
|
|
public static void
|
|
main(String[] args) throws Exception {
|
|
final MultiLock multiLock = new MultiLock();
|
|
new Thread() {
|
|
@Override
|
|
public void run() {
|
|
multiLock.f1(10);
|
|
}
|
|
}.start();
|
|
}
|
|
}
|
|
/* Output:
|
|
f1() calling f2() with count 9
|
|
f2() calling f1() with count 8
|
|
f1() calling f2() with count 7
|
|
f2() calling f1() with count 6
|
|
f1() calling f2() with count 5
|
|
f2() calling f1() with count 4
|
|
f1() calling f2() with count 3
|
|
f2() calling f1() with count 2
|
|
f1() calling f2() with count 1
|
|
f2() calling f1() with count 0
|
|
*/
|