2012-03-22 13 views
-1

私のコードはセマフォーで動作しますが、Javaモニターでこの機能を有効にしたいと思います。リリース。どのように私はこれを行うことができます誰も教えてくれる?Java Semaphoreの取得と解放をJavaモニターで置き換える方法同期、待機、通知(すべて)

public class Track { 

    private final Semaphore mutex = new Semaphore(1,true); 
    private final Semaphore use = new Semaphore(1,true); 

    public Track(){} 

    public void gebruikWissel(String v) throws InterruptedException 
    { 
     mutex.acquire(); 
     System.out.format("Trein %s maakt gebruik van de wissel", v); 
     mutex.release(); 
    } 

    public void useTrack() throws InterruptedException 
    { 
     use.acquire(); 
    } 

    public void stopUseTrack() 
    { 
     use.release(); 
    } 
} 
+0

ハハ、ジャグvisste detnärjagsågrubriken。ヘイ・エミール! – lindhe

答えて

0

あなたのクラスが構造化されているとは思いません。たとえば、同期を使用するuseTrack()または 'stopUseTrack()'メソッドを記述することもできません。

は、同期からセマフォからより一般的です。なぜあなたは反対の方向に行きたいと思うのですか?

+0

私たちは学校のために持っているので:D – user735646

+2

@ user735646 - あなたは '宿題'タグを追加し、これを自分で最初にやろうとするべきです。経験豊かな開発者にあなたの完全な課題を尋ねることは、自滅しています。行って試してみてください。うまくいかない場合は、デバッグしてみてください。デバッグは非常に重要なので、経験豊富なデベロッパーからの多くの投稿がこの分野の技術の不足を示すことは驚くべきことです。あなたはそれをうまく行かないソフトウェアを書いてください(これは非常に簡単で正直です:)、それを修正してください。 –

3

あなたは例えば、同期を使用して、簡単な内部カウンタ:

private int counter; 

public synchronized void useTrack() throws InterruptedException 
{ 
    while(counter == 1) { 
     wait(); 
    } 
    counter++; 
} 

public synchronized void stopUseTrack() 
{ 
    counter--; 
    notifyAll(); 
} 

を行うことができますUPDATE: が、これは宿題だった実現しませんでした。まあ、私は良いグレードを得ることを望む!

+0

downvote?何のために?答えは正しい。私が答えた後に「宿題」タグが追加されました。私は私の答えを削除することができますが、この時点で猫はすでに袋から出ていますか? – jtahlborn

+0

+1!いい物。 – Tudor

関連する問題