从Java中同一类的另一个同步方法内创建的新线程调用synchronized方法

时间:2014-01-29 11:13:54

标签: java multithreading

假设一个类有两个方法,如下所示:

public synchronized void methodA() {
  // do some stuff

  new Thread() {
    public void run() {
      methodB();
    }
  }.start();
}

public synchronized void methodB() {
  // do some stuff
}   

我们调用methodA(),新线程是否会被调用methodA()的线程阻止?

1 个答案:

答案 0 :(得分:3)

可能不会:new Thread().start()立即返回,所以当新线程实际启动并调用methodB()时,原始线程很可能已经退出methodA()

如果你这样做:

public synchronized void methodA() throws InterruptedException {
  new Thread() {
    public void run() {
      methodB();
    }
  }.start();
  Thread.sleep(10000);
}

你的methodB将阻止大约10秒钟,等待原始线程释放锁定。