我在一个类中有 2 个同步方法,比如 method1() 和 method2()。一个线程说“线程 1”通过执行同步方法 1() 持有该类对象的锁。另一个线程说“线程 2”,同时通过方法 2() 访问锁,而“线程 1”持有锁。
这种情况类似于具有同步 add() 和 remove() 方法的 java.util.Vector 类。 也请解释一下这个案例。
最佳答案
没有。 Java 中的 synchronized
方法等同于将主体包裹在 synchronized (this)
block 中的整个方法。因此,如果一个线程处于 synchronized
方法中,则另一个线程不能同时处于同一对象上的不同synchronized
方法中。。
这与 Vector
相关的方式是您不希望某些代码试图删除元素,而其他代码试图添加元素。这就是临界区的概念;您不仅不希望其他人尝试做您正在做的事情,您也不希望其他人做一些会干扰的不同事情。
关于java - 同一个对象的两个不同的同步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3226580/