根据Sun Microsystems的说法, Java监视器是可重入的, 这意味着, 如果从方法中调用方法, 则Java线程可以将同一监视器用于不同的同步方法。
可重入监控器的优势它消除了单线程死锁的可能性
让我们通过以下示例了解Java可重入监视器:
class Reentrant {
public synchronized void m() {
n();
System.out.println("this is m() method");
}
public synchronized void n() {
System.out.println("this is n() method");
}
}
在此类中, m和n是同步方法。 m()方法在内部调用n()方法。
现在让我们在线程上调用m()方法。在下面给出的类中, 我们使用匿名类创建线程。
public class ReentrantExample{
public static void main(String args[]){
final ReentrantExample re=new ReentrantExample();
Thread t1=new Thread(){
public void run(){
re.m();
//calling method of Reentrant class
}
};
t1.start();
}}
【Java中的可重入监视器】立即测试
Output: this is n() method
this is m() method
推荐阅读
- 线程优先级(Thread Priority)
- Java线程命名和当前线程
- Java线程的生命周期(线程状态)
- Java多线程介绍
- Java线程池介绍和实例
- 线程join()方法
- Java Runtime类
- Java中的线程间通信
- Java中断线程