2016-05-15 90 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