“同步”到底是做什么的?

时间:2014-09-08 11:00:23

标签: java multithreading synchronization

我有一个问题可能听起来非常基本,但在这里。正如Java中通常所知,synchronize关键字用于处理访问一个特定实例的多个线程。现在假设实例A是否具有同步方法do()。这是否意味着如果线程T1执行方法do()并因此获取A的锁定,则在T1释放锁定之前,其他任何线程都不会访问实例A(即使其他方法未同步)?或者它意味着可以访问所有未同步的方法(或代码块),除了特定的do()方法,它一次只能由一个线程执行?

3 个答案:

答案 0 :(得分:1)

直接来自Java documentation

  

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

因此,您的后一种解释是正确的。

答案 1 :(得分:0)

synchronized方法确保不会同时为多个对象实例调用此方法,并且在执行synchronized方法期间,所有关联的实例变量在开始执行方法之前都会刷新。

答案 2 :(得分:0)

如果T1获取方法do()的锁定,则方法处于同步块下。 和程序的其他部分说方法display()不同步,然后其他线程可以访问此方法。 所以你的或者是正确的。