2017-05-23 12 views
-1

私は2つのスレッドt1t2を持っていますが、それぞれ個別のタスクを実行します。Javaスレッド完了ステータス

スレッドt1のタスクの60%完了後にスレッドt2を開始したいとします。

どのように私はそれを達成することができます誰か考えがありますか?

+1

60%の完成度はどうすればわかりますか?あなたは公開コードを提供しておらず、私たちは役に立たない。 – glee8e

+0

それは私の質問は何ですか..それを見つけるためにJavaスレッド内の任意のビルトインライブラリですか? –

+0

あなたは関数_h(A)_を求めているようですね。ここで_A_は任意の他の関数_a(...)_の_activationレコードです。 _a(...)_の呼び出しが戻るまでにどれくらいの時間が経過するかを_h(A)_で計算します。アクティベーションレコードがJavaで_reflect_できるオブジェクトではないことに気をつけてください。大きな障害は、あなたが[停止問題](https://en.wikipedia.org/wiki/Halting_problem)を解決するために_h(A)_を使用できることです。 –

答えて

0
@Test 
public void test() throws InterruptedException{ 
    Thread t = new Thread(new Task1()); 

    t.start(); 

    t.join(0); 

    //keep in mind that t2 can still be running at this point 
    System.out.println("done running task1."); 
} 

public static class Task1 implements Runnable{ 

    public void run(){ 
     //Smimulate some long running job. In your case you need to have your own logic of checking if t1 is 60% done. 
     //In this case we just wait 0.5 seconds for each 10% of work done 
     for (int i = 0; i < 10; i++){ 

      try { Thread.sleep(500); } 
      catch (InterruptedException e) { throw new RuntimeException(e); } 

      int percentComplete = i*10; 

      System.out.println("Completed " + percentComplete + "%."); 

      if (percentComplete == 60){ 
       new Thread(new Task2()).start(); //this how to start t2 when we are 60% complete 
      } 
     }    
    } 
} 

public static class Task2 implements Runnable{ 

    @Override 
    public void run() { 
     //simulate t2 task that will run for 5 seconds. 

     System.out.println("task2 started."); 

     try { Thread.sleep(5000); } 
     catch (InterruptedException e) { throw new RuntimeException(e); } 

     System.out.println("task2 is done."); 
    } 

} 
0

T1は60%完了したら知ることができますか?もしそうなら、その時にT2を始めるのはなぜですか?

Thread t2 = null; 

class T2task implements Runnable { 
    ... 
} 

class T1task implements Runnable { 
    @Override 
    public void run() { 
     while (isNotFinished(...)) { 
      if (isAtLeast60PercentDone(...) && t2 != null) { 
       t2 = new Thread(new T2task(...)); 
       t2.start(); 
      } 
      doSomeMoreWork(...); 
     } 
    } 
} 
関連する問題