javaのThreadクラスにスレッドに一時停止を行うためのSleepメソッドがあると思うのですが、
Sleepメソッドがstaticメソッドなのになんだか違和感を感じます。
下記のコードのように、Threadクラスを継承したクラスのオブジェクトが2つある場合、
Sleepメソッドを呼び出した場合、thread1Aとthread1B、両方のスレッドがとまることになると思うのです。
どちらか片方のスレッドだけ停止させたいときもあると思うので、なんとなくですがインスタンスメソッドであるほうが自然な気がします。
こんなつくりになっているのは何か理由があるのでしょうか?
Threadについて理解が乏しいので質問がわかりにくかったら申し訳ありません。
よろしくお願いします。
java
1public class MainClass { 2 public static void main(String args[]){ 3 System.out.println("Start"); 4 5 Thread_1 thread1A = new Thread_1(1,"ThreadA"); 6 Thread_1 thread1B = new Thread_1(2,"ThreadB"); 7 8 thread1A.start(); 9 thread1B.start(); 10 11 System.out.println("End"); 12 } 13} 14
java
1public class Thread_1 extends Thread { 2 3 private int id; 4 private String name; 5 6 public Thread_1() { 7 } 8 9 public Thread_1(int id, String name) { 10 this.id = id; 11 this.name = name; 12 } 13 14 @Override 15 public void run() { 16 System.out.println(this.name + ":run"); 17 try { 18 System.out.println(this.name + ":sleep"); 19 /*たとえば"ThreadA"だけSpeepしたいときはこんな感じで記述できればいいと 20 思ったのですがエラーになりますよね*/ 21// if(this.name.equals("ThreadA")){ 22// this.sleep(1000); 23// } 24 Thread.sleep(1000); 25 } catch (InterruptedException e) { 26 e.printStackTrace(); 27 } 28 System.out.println(this.name + ":end"); 29 } 30 31}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/18 02:59