获取调用wait方法的线程的内部锁的方法

时间:2017-06-30 15:36:19

标签: java multithreading locking wait

逻辑上,可以理解,调用wait方法的线程应该已经获取了正在调用wait的对象的内部锁。

oracle教程here中陈述了“在对象的同步方法中调用wait是获取内部锁定的简单方法”,这意味着至少可能存在获得锁定的另一种方式。

我的问题是,为了调用wait,除了在synchronized方法中调用wait之外,还有其他方法来获取内部锁吗? ......他们是什么?

1 个答案:

答案 0 :(得分:0)

一些(密切相关的)其他人会浮现在脑海中:

  • synchronized区块中:

    synchronized (this) {
      wait();
    }
    
  • 在非同步方法中,从同步方法内部调用:

    synchronized void a() {
      b();
    }
    
    void b() {
      wait();
    }
    
  • 在非同步方法中,从同步块内部调用:

    synchronized (this) {
      b();
    }
    
    void b() {
      wait();
    }