0

与えられたプログラムについて、私が期待したものが得られなかったので、あなたは説明できますか?

package javaapplication14;

class Mythread implements Runnable{
    String myname;
    int myage;

    public Mythread( String par_name, int par_age){
        myname = par_name;
        myage = par_age;
    }
    public void run(){
        try{
          for(int i=1; i<=myage; i++)  {
              System.out.println("Happy birthday "+myname);
              Thread.sleep(2000);
          }
        }catch(Exception e){
            System.out.println();
        }
    }
}
public class JavaApplication14 {

    public static void main(String[] args) {
      Mythread m = new Mythread("Mutinda ", 2);
      Mythread p = new Mythread("Boniface", 2);
      Thread k = new Thread(m);
      Thread q = new Thread(p);
      k.start();
      q.start();
      Thread t = new Thread(m);
      try{
        for( int i=1; i<=5; i++){
          System.out.println("Main thread executing");
          Thread.sleep(1000);          
        }  
      }catch(Exception e){
          System.out.println("Thread interrupted");
      }

    }
}

そして、これは私の出力でした:

Main thread executing
Happy birthday Boniface
Happy birthday Mutinda 
Main thread executing
Main thread executing
Happy birthday Boniface
Happy birthday Mutinda 
Main thread executing
Main thread executing

私はこれを期待しました:

Main thread executing
Happy birthday Mutinda 
Happy birthday Boniface
Main thread executing
Main thread executing
Happy birthday Mutinda
Happy birthday Boniface
Main thread executing
Main thread executing

スリープ時間に関係なく、の出力がより最初のスレッドkになるように、2つのスレッドに設定された優先順位を説明してくれる人が必要です。qqk

私の議論:k.start()の前に呼び出されたので、最初に呼び出したのでq.start()、出力はで始まると予想されk、2つは同じスリープ時間を取ります。

4

3 に答える 3

3

基本的にあなたの議論は間違っています。start()関数はトレッドを開始しません。単に実行可能な状態にします。

于 2012-05-31T09:03:27.400 に答える
3

スレッドを開始するとき、それは相互依存性がほとんどまたはまったくない独立したタスクがあるためです。そのため、2つのスレッド間で特定の実行順序を期待するべきではありません。実際、ほとんどのマルチスレッドのバグは、そのような仮定を行うことから生じます。

特定の順序で物事を起こさせたい場合は、単一のスレッドを使用してください。タスクに特定の順序がないと想定できる場合は、複数のスレッドを使用してください。

于 2012-05-31T09:04:45.340 に答える
0

マルチスレッドシーケンスの実行の優先順位に依存することはできません。Javaスレッドの基本的なルールは、JVMに依存し、各スレッドの実行シーケンスについて確実性がないということです。優先順位は実行に影響を与える可能性がありますが、実行を保証するものではありません

于 2012-05-31T09:08:14.073 に答える