Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

スレッドに関して教えてください

 class Computation extends Thread{  
     private int num;  
     private boolean isComplete;  
     private int result;  
       
     public Computation(int num){  
         this.num = num;  
     }  
       
     public synchronized void run(){  
         result = num * 2;  
         isComplete = true;    
         notify();  
     }  
       
     public synchronized int getResult(){  
         while(!isComplete){  
             try{  
                 wait();  
             }  
             catch(InterruptedException e){  
                   
             }  
         }  
         return result;    
     }  
       
     public static void main(String[] args){  
         Computation[] computations = new Computation[4];  
         for(int i=0;i<computations.length;i++){  
             computations[i] = new Computation(i);  
             computations[i].start();  
         }  
         for(Computation c : computations){  
             System.out.print(c.getResult() + " ");  
         }  
       
     }  
 }  


なぜ”2064”となることは無いのでしょうか。
スレッドの優先順位の指定も内容に思われるのですが、
わかりません><

7

回答

4112

閲覧

7件の回答

評価

0

2064という数字はどこから出てきたのかが、そろそろ分からない。

評価

0

>なぜ”2064”となることは無いのでしょうか。
なぜって、順番にパラメータを与えたものを
その順番で表示してるからじゃないの

評価

0

お返事ありがとうございます。
初心者で申し訳ありません><

まだ分からないのですが、computations[i].start(); 
でスレッドが作成されて実行可能状態からどのスレッドが
実行状態になるかは分からないので"0246"の順番とは限らないと思ってました。

パラメータを与えた順になるところがう〜ん、分からないです><

評価

0

ああ、そういうことか。
2064は単なる例ね。

うん、呼び出された側が表示するならともかく、
呼び出した側が呼び出した順に表示するのだから、
順番が狂うことはないね。
しっかり終了待ちしてるから、答えがおかしいこともないし。

評価

0

スレッドがどの順番で実行されようと

 for(Computation c : computations){  
       System.out.print(c.getResult() + " ");  
 } 

の部分でComputation[]を要素0〜3まで順番に表示させているから"0246"と言う結果になるということでいいですかね。



 for(Computation c : computations){  
       System.out.print(c.getResult() + " ");  
 } 
の部分はmainスレッドですよね。


sjcpの参考問題なんですがVBAしかさわった事がないもので、くどいですがよろしくおねがいします。


         } 

評価

0

それでいいよ。
マルチスレッドによる挙動の変化は、並行して実行されている自分以
外のスレッドの都合を考えないから起こる。
今回のように、スレッドがしっかりコントロールされる構造であれ
ば、結果が変わることはない。

評価

0

ありがとうございました。
またよろしくお願いします!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。