2016-04-16 9 views
0

私はいくつかのチュートリアルをオンラインで読んだことがあり、それに従うのが難しく、新しいクラスの設定とメインでのスレッドの実行を参照しています。私はGUIのバックエンドを構築しているので、私はメインを持っていない、私はただのインターフェイスに取り組んでいる。Javaの並行性 - メソッド上だけ?

以下のサンプルコードを貼り付けて、私がしたいことを実証しました。

public class TestClass { 

public void testMethod(){ 
    Queue<List<Long>> q = new ArrayDeque<>(); 
    List<Long> testList = new ArrayList<>(); 
    testList.add(9L); 
    q.add(testList); 

    while(q.size()>0){ 
     //take off list from front of queue 
     //manipulate list and return it to queue/Delete it if no more to add and not reached a threshold. 
    } 

だから、基本的に私はそれがために実行される時間を制御し、また、いくつかの効率を得ることができるようにしたいとスレッドとしてwhileループを呼び出すしたいと思います。

誰か助言してもらえますか?

おかげ

答えて

2
はこのような何かにあなたの whileループを変更

Thread t = new Thread(){ 
    public void run() { 
     while (q.size() > 0) { 
      // take off list from front of queue 
      // manipulate list and return it to queue/Delete it if no more to 
      // add and not reached a threshold. 
     } 
     //all other code 
    }; 
}; 
t.start(); 

スレッドが実行を完了するのを待つことができますが、whileループが終了するまで、テストメソッドが再びブロックされます。私はこれがあなたが必要とするものだとは思わない。

Thread t = new Thread(){ 
    public void run() { 
     while (q.size() > 0) { 
      // take off list from front of queue 
      // manipulate list and return it to queue/Delete it if no more to 
      // add and not reached a threshold. 
     } 
    }; 
}; 
t.start(); 
t.join();//waits for the thread to finish execution. 
//rest of your code. 
+0

これは、私のコードが@Johnson Charlesを実行できるようにしていますが、whileステートメントの後にコードがあり、whileステートメントが使い尽くされる前に実行したくないコードです。何か案は? –

+1

whileの後のすべてをスレッドのrunメソッドに移動できますが、必要に応じて変わります。スレッドが実行を終了した後にのみ実行したい場合は、私の更新された答えを見てください。 –

+0

はい、それは動作します。どのようにどのように特定の秒数のために実行してくださいに制限する任意のアイデアですか? –