我在类中有2个同步方法,比如说method1()和method2()。线程说“线程1”通过执行synchronized方法1()来保持对该类对象的锁定。另一个线程可以说“线程2”,同时通过method2()访问锁定,同时“线程1”持有锁。
这种情况类似于java.util.Vector类,它具有同步的add()和remove()方法。 请解释这个案例。
答案 0 :(得分:10)
没有。 Java中的synchronized
方法与将其主体包装在synchronized (this)
块中的整个方法相同。因此,如果一个线程在synchronized
方法中,则另一个线程不能同时位于同一对象上的不同synchronized
方法 。
这与Vector
的关联方式是,您不希望某些代码在其他代码尝试添加元素时尝试删除元素。这是关键部分的概念;你不仅不希望别人试图做你正在做的事情,你也不希望别人做一些会干扰的事情。
答案 1 :(得分:3)
Thread2可以访问锁,但只要Thread1持有相同的锁,就无法进入该锁保护的块。
答案 2 :(得分:0)