如果t1访问m1方法(同步方法),t2线程可以同时访问m2方法(同步方法)吗?
该
synchronized关键字适用于 目标水平 ,且只有一个线程可持有对象的锁。因此,只要您在谈论同一个对象,那么 否
,
t2它将等待
t1释放进入时获得的锁
m1。
但是,线程可以通过调用来释放锁而无需从方法中返回
Object.wait()。
如果不是,则t2的状态是什么?
它会紧紧地等待
t1释放锁(从方法返回或调用
Object.wait())。具体来说,它将处于
BLOCKED状态。
线程的线程状态被阻塞,等待监视器锁定。
处于阻塞状态的线程正在等待监视器锁定以输入同步块/方法,或者在调用后重新输入同步块/方法Object.wait。
样例代码:
public class Test { public synchronized void m1() { try { Thread.sleep(2000); } catch (InterruptedException ie) {} } public synchronized void m2() { try { Thread.sleep(2000); } catch (InterruptedException ie) {} } public static void main(String[] args) throws InterruptedException { final Test t = new Test(); Thread t1 = new Thread() { public void run() { t.m1(); } }; Thread t2 = new Thread() { public void run() { t.m2(); } }; t1.start(); Thread.sleep(500); t2.start(); Thread.sleep(500); System.out.println(t2.getState()); }}输出:
BLOCKED



