我有一个问题可能听起来非常基本,但在这里。正如Java中通常所知,synchronize
关键字用于处理访问一个特定实例的多个线程。现在假设实例A是否具有同步方法do()
。这是否意味着如果线程T1执行方法do()
并因此获取A的锁定,则在T1释放锁定之前,其他任何线程都不会访问实例A(即使其他方法未同步)?或者它意味着可以访问所有未同步的方法(或代码块),除了特定的do()
方法,它一次只能由一个线程执行?
答案 0 :(得分:1)
直接来自Java documentation:
对同一对象的两个同步方法的调用不可能进行交错。当一个线程正在为对象执行同步方法时,所有其他线程都会调用同一对象的同步方法阻塞(暂停执行),直到第一个线程完成对象为止。
因此,您的后一种解释是正确的。
答案 1 :(得分:0)
synchronized方法确保不会同时为多个对象实例调用此方法,并且在执行synchronized方法期间,所有关联的实例变量在开始执行方法之前都会刷新。
答案 2 :(得分:0)
如果T1获取方法do()
的锁定,则方法处于同步块下。
和程序的其他部分说方法display()
不同步,然后其他线程可以访问此方法。
所以你的或者是正确的。