java 基本多线程
java basic multithreading
为什么下面的代码不是死锁而且工作正常?
public class Concurrent {
public static void main(String[] args) {
Concurrent my = new Concurrent();
my.method1();
}
private synchronized void method1() {
System.out.println("method1");
method2();
}
private synchronized void method2() {
System.out.println("method2");
}
}
Output:
method1
method2
当我调用 method1() 时,监视器被锁定。 JVM 或编译器无法调用 method2(),因为此方法也被 "my" 对象的监视器同步。但它工作正常。
Why doesn't the code in the Question deadlock?
因为原始互斥体(监视器)是可重入的。当给定互斥体中的线程试图再次获取它时,它不会阻塞。
"A thread t may lock a particular monitor multiple times; each unlock reverses the effect of one lock operation."
为什么下面的代码不是死锁而且工作正常?
public class Concurrent {
public static void main(String[] args) {
Concurrent my = new Concurrent();
my.method1();
}
private synchronized void method1() {
System.out.println("method1");
method2();
}
private synchronized void method2() {
System.out.println("method2");
}
}
Output:
method1
method2
当我调用 method1() 时,监视器被锁定。 JVM 或编译器无法调用 method2(),因为此方法也被 "my" 对象的监视器同步。但它工作正常。
Why doesn't the code in the Question deadlock?
因为原始互斥体(监视器)是可重入的。当给定互斥体中的线程试图再次获取它时,它不会阻塞。
"A thread t may lock a particular monitor multiple times; each unlock reverses the effect of one lock operation."