[ Top ] > [ Communication ] > [ study ] > [ Java ]
>スレッド-2-
 
 
 

スレッド-2-

もっとわかりやすい実験をしました。

> myThread.java
class myThread{

  public static void myPrint(String msg){
    System.out.println(msg);
  }
  //メイン処理
  public static void main(String args[]){
    childThr thr1 = new childThr("ひとつ目",500);
    childThr thr2 = new childThr("二つ目",300);
    
    thr1.start();
    thr2.start();
  }
}


class childThr extends Thread{
  String thMsg;
  int time;
  public childThr(String s,int t){
    thMsg = s;
    time = t;
  }
  public void run(){
    for(int i = 0;i < 10;i++){
      System.out.println(thMsg);
      myThread.myPrint(thMsg + "のスレッドがmyThread.myPrintで出力:");
      try{
        sleep(time);
      }catch(Exception e){}
    }
  }
}

■色の部分が付け足した部分です。

public static void myPrint(String msg){
 System.out.println(msg);
}
メインの myTreadクラスで新しいメソッドを定義しました。各スレッドからこのメソッドにアクセスするためにはどうすればいいかの実験用です。
ただ単に引数で受け取った文字列を出力するだけです。

childThr thr1 = new childThr("ひとつ目",500);
childThr thr2 = new childThr("二つ目",300);
コンストラクタを少し改造して、引数を二つ受け取れるようにしました。

 

次に、childThrクラスです。

int time;
各スレッドを一時停止させるための時間をいれるための変数です。

  public void run(){
    for(int i = 0;i < 10;i++){
      System.out.println(thMsg);
      myThread.myPrint(thMsg + "のスレッドがmyThread.myPrintで出力:");
      try{
        sleep(time);
      }catch(Exception e){}
    }
  }
わかりやすくするために、各スレッドが10回同じ処理を実行します。また、各スレッドはそれぞれ微妙に ずれて処理をするようにしてあります。そのずらしが sleep( time ) になります。各スレッドはこのメソッドにより、timeミリ秒スリープ、つまり停止します。
で、
myThread.myPrint(thMsg + "のスレッドがmyThread.myPrintで出力:");
ここで、メインの方のクラスのメソッドを呼んでいます。
メインのクラス名にドットシンタックスでメソッドを記述すると、そのメソッドを使用することが出来るみたいですね。 前回の this と、同じ使い方です。
>java myThread
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
二つ目
二つ目のスレッドがmyThread.myPrintで出力:
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
ひとつ目
ひとつ目のスレッドがmyThread.myPrintで出力:
>

こんな感じになりました。