2016-05-15 97 views
2

假设我有两个类A和B当线程执行'B'时,是否可以阻止线程访问'A'?

public class A 
{ 
    public synchronized void doSomethingA 
    { 
     //Do stuff 
    } 
} 

public class B 
{ 
    public synchronized void doSomethingB 
    { 
     //Do other stuff 
    } 
} 

,我有齐声运行两个线程,让我们称他们为x和y。

由于方法是同步的,当x在那里时,y不可能访问dosomethingA,但是当x正在做doSomethingB时,它可以访问doSomethingA。

有没有办法阻止y做任何事,而x是在doSomethingA或doSomethinB?

+0

请注意,您锁定的对象不是方法或线程。如果要阻止访问锁定的对象,请首先获取锁定。 –

回答

0

很多方法。最直接的方法是使用ReentrantLock`。

它提供了与​​相同的功能,但您自己负责管理锁定。您需要在两个类之间共享一个,以便两种方法都可以使用它进行锁定。

+0

谢谢!这有帮助! –

+0

我尽量不花时间给予无益的答案。 – Kayaman