同一个对象的两个不同的同步方法?

时间:2010-07-12 07:30:17

标签: java synchronization vector

我在类中有2个同步方法,比如说method1()和method2()。线程说“线程1”通过执行synchronized方法1()来保持对该类对象的锁定。另一个线程可以说“线程2”,同时通过method2()访问锁定,同时“线程1”持有锁。

这种情况类似于java.util.Vector类,它具有同步的add()和remove()方法。 请解释这个案例。

3 个答案:

答案 0 :(得分:10)

没有。 Java中的synchronized方法与将其主体包装在synchronized (this)块中的整个方法相同。因此,如果一个线程在synchronized方法中,则另一个线程不能同时位于同一对象上的不同synchronized方法

这与Vector的关联方式是,您不希望某些代码在其他代码尝试添加元素时尝试删除元素。这是关键部分的概念;你不仅不希望别人试图做你正在做的事情,你也不希望别人做一些会干扰的事情。

答案 1 :(得分:3)

Thread2可以访问锁,但只要Thread1持有相同的锁,就无法进入该锁保护的块。

答案 2 :(得分:0)