在java中访问synchronized方法

时间:2015-03-31 12:56:38

标签: java multithreading

简单的问题,但我没有多线程经验。 如果两个线程使用相同的 synchronized 方法(在Java中)并且第一个线程在给定时间无法访问该方法(因为第二个线程正在使用它),第一个线程是否会等待某些线程(冻结)时间,然后尝试再次访问它,或者它只是放弃而根本不访问它?

3 个答案:

答案 0 :(得分:3)

根据doc

,第一种方法会阻塞并等待它可以使用该方法
  

当一个线程正在为一个对象执行一个synchronized方法时,所有其他线程都会调用同一个对象的同步方法阻塞(暂停执行),直到第一个线程完成该对象为止。

我不能100%确定我是否记得正确,但如果内存对我有用,那么JVM并不能保证线程能够获得锁定后的顺序。已被释放。

答案 1 :(得分:0)

答案 2 :(得分:0)

等待。

JVM不允许两个线程同时在同一个对象上同步。如果一个线程在第二个线程尝试时已经同步,那么第二个线程将进入休眠状态并添加到队列中。

每当线程释放一个锁(即,当它从同步方法或块退出时),该锁的队列头部的线程将被唤醒,然后它将被允许锁定锁。