2016-03-25 10 views
1

特定のプロセスが完了するまで、すべてのネットワークアクティビティをブロックする必要があるアプリがあります。その後、すべてのスレッドは自由にネットワークアクティビティを実行する必要があります。ブロッキングは私にとって弱点ですが、私が正しくやっているかどうかは不明です。私は私がしていることはうまくいくと信じていますが、私の腸の本能は私にこのようにしてはいけないと言います。今1としてJavaでブロックする

public static class BlockingClass implements ReentrantLock 
{ 
    private static BlockingClass sBlockingClass = new BlockingClass(); 

    static 
    { 
     sBlockingClass.lock(); 
    } 


    public void ProcessThatNeedsToWait() 
    { 
     while(sBlockingClass.isLocked()); 

     Continue(); 
    } 


    public void ProcessThatNeedsToBeWaitedFor() 
    { 
     DoInitWork(); 

     sBlockingClass.unlock(); 
    } 
} 
+2

私は 'CountDownLatch'のような' java.util.concurrent'クラス(http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html)を使います。 – CommonsWare

+0

ネットワークへのアクセス方法の詳細を入力できますか?おそらく、これは、特別なスレッドが接続を獲得するときにネットワーク接続を取得することをブロックするConnectionPoolを実装するソリューションです。 –

+0

@CommonsWare私はjava.util.concurrent.Phaserを使いました。 onAdvanceで、私は基本的にちょうど{最初のスレッドが完了しました}を返す、正しい方向に私を指してくれてありがとう!^_^ – KairisCharm

答えて

0

あなたは、その
よりよい解決策は、1つのマネージャクラスに置くランナブルと として、あなたのタスクを実装するprobableyます「(...)ながらの継続」と「ビジーウェイト」を使用しています最初のタスクにコールバックを渡し、コールバックの戻り値がリストをトラバースし、それ自身のスレッドですべての実行可能ファイルを開始するとすぐに、マネージャ内のリストに新しいタスクを追加します(コールバックはまだ戻っていません)。
ofcourseその解決策は、あなたが直面している問題から理解できるものだけが適用されます。もしそれが適切であれば、あなたが解決しようとしていることをより良く理解できるようにします。

関連する問題