2016-05-15 4 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 
    } 
} 

を持っていると私は一斉に実行している2つのスレッドがあると仮定し、のは、xとyそれらを呼びましょう。

メソッドが同期しているので、xがそこにある間にyがdosomethingAにアクセスすることはできませんが、xがdoSomethingBを実行している間はdoSomethingAにアクセスできます。

xがdoSomethingAまたはdoSomethinBにある間にyが何かをブロックする方法はありますか?

+0

メソッドまたはスレッドではなくオブジェクトをロックすることに注意してください。ロックされたオブジェクトへのアクセスをブロックする場合は、最初にロックを取得します。 –

答えて

0

多くの方法があります。最も直接的な方法は、ReentrantLock `を使用することです。

それは​​と同じ機能を提供しますが、あなたは自分自身をロック管理を担当しています。両方のメソッドがロックのために使用できるように、クラス間でクラスを共有する必要があります。

+0

ありがとう!それが助けになった! –

+0

私は役に立たない答えを与えるのに時間を費やさないようにしています。 – Kayaman

関連する問題