2016-04-22 7 views
-1

コントロールが "Explo Thread"出力ステートメントから "Main Thread"出力ステートメントにどのように転送されているのか理解できません。コントロールは、「メインスレッド」出力文に「正しくありませんスレッド」出力文から転送されたか誰かがこのコードを説明することができますか?それはスレッディングに関連していますか?

package com.myjava.threads; 

class MyRunnableThread implements Runnable { 
    public static int myCount = 0; 

    public MyRunnableThread() { 
    } 

    public void run() { 
     while (MyRunnableThread.myCount <= 10) { 
      try { 
       System.out.println("Expl Thread: " + (++MyRunnableThread.myCount)); 
       Thread.sleep(100); 
      } catch (InterruptedException iex) { 
       System.out.println("Exception in thread: " + iex.getMessage()); 
      } 
     } 
    } 
} 

public class RunMyThread { 
    public static void main(String a[]) { 
     System.out.println("Starting Main Thread..."); 
     MyRunnableThread mrt = new MyRunnableThread(); 
     Thread t = new Thread(mrt); 
     t.start(); 
     while (MyRunnableThread.myCount <= 10) { 
      try { 
       System.out.println("Main Thread: " + (++MyRunnableThread.myCount)); 
       Thread.sleep(100); 
      } catch (InterruptedException iex) { 
       System.out.println("Exception in main thread: " + iex.getMessage()); 
      } 
     } 
     System.out.println("End of Main Thread..."); 
    } 
} 



The output is: 

メインスレッドを開始しています...

Main Thread: 1 
Expl Thread: 2 
Main Thread: 3 
Expl Thread: 4 
Main Thread: 5 
Expl Thread: 6 
Main Thread: 7 
Expl Thread: 8 
Main Thread: 9 
Expl Thread: 10 
Main Thread: 11 
End of Main Thread... 
+0

コードを適切に書式設定してください。字下げがなくても、実際には読みにくいです。 –

+0

'++ MyRunnableThread.myCount'はスレッドセーフではないことに注意してください。まれに、出力が正しくない可能性があります – Numeron

答えて

2

制御が渡されていません。代わりに各スレッドが呼び出しています

Thread.sleep(100); 

これは同じ時間量であるため、順番に処理されます。そのうちの1つをsleep(50)に変更すると、メッセージが2倍速く表示されます。

1

転送される制御はありません...スレッドは、独立して100ミリ秒ごとにコンソールに印刷します。時間が同じであるので、彼らは「交代する」と思われますが、「最初に行く」は決定的ではありません。

Thread.sleep(100);のいずれかの値を変更すると、もう一方が印刷に比べて時間がかかります。

0

これは、スレッドスケジューラが決定するものです。スレッドを開始すると、既に存在する他のスレッドと並行して実行されます。そのスレッドスケジューラは各スレッドに割り当てられた順序と時間を決定します。

実行順にの保証がありませんがあります。

関連する問題