みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ThreadとRunnableのlogへの表示差異

マルチスレッドでsleep()の時間を指定して動かすのを前提で、
Threadを継承した時は、時間通りに(リアルタイムで)
eclipseのコンソールへ表示されるのですが、
Runnableをインプリメントしての動作では、
eclipseのコンソールに一瞬で表示されるのは何故でしょうか?

public class MultiThread3 implements Runnable{
int time;

MultiThread3(int time) {
this.time = time;
}
public void run() {
for(int i=0; i<5; i++)
System.out.println("No."+i+":"+Thread.currentThread().getName());
try{
Thread.sleep(time);
}catch (InterruptedException e) {}
}
}
class MultiThreadTest3{
public static void main(String[] args) {
MultiThread3 a = new MultiThread3(500);
MultiThread3 b = new MultiThread3(700);
MultiThread3 c = new MultiThread3(1100);

Thread ta = new Thread(a);
Thread tb = new Thread(b);
Thread tc = new Thread(c);

ta.setName("A");
tb.setName("\tB");
tc.setName("\t\tC");

ta.start();
tb.start();
tc.start();
}

}

投稿日時 - 2014-11-07 00:39:12

QNo.8816463

暇なときに回答ください

質問者が選んだベストアンサー

おそらく for で繰り返す部分に {} を付けるのを忘れたのでは?

for で5回 System.out.println(・・・); を繰り返して、最後に1回だけ sleep するロジックになっていますよ。

run メソッド部分のインデントを整えると↓な感じです。

public void run() {

 for (int i=0; i < 5; i++)
  System.out.println("No."+i+":"+Thread.currentThread().getName());  // for で繰り替えさえるのはこの行だけ

 try{
  Thread.sleep(time);
 } catch (InterruptedException e) {}
}

投稿日時 - 2014-11-07 02:49:25

お礼

ご指摘のミスでした。
下らないミスを迅速にアドバイス頂いて、ありがとうございました。

投稿日時 - 2014-11-07 03:57:15

ANo.1

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問