next up previous
Next: ごみ集め Up: 10 マルチスレッド Previous: 10 マルチスレッド

10.1 スレッドクラスを継承したクラスとして

Javaではスレッドは2つの方法で定義できる.
// ThreadTest.java

class EchoTread extends Thread {
  int i = 0;
  public void sleep(int a) {
  }
  public void run() {
    while (i++ < 3) {
      System.out.println("hello " + i + " in " + getName());
      try {
        sleep(1000,300);  
      } catch (InterruptedException e) {
      }
    }
  }
}

public class ThreadTest {
  public static void main(String argv[]){
    EchoTread th1 = new EchoTread();
    EchoTread th2 = new EchoTread();
    System.out.println("Thread test");
    th1.start();
    th2.start();
    System.out.println("end Start");
  }
}
Threadクラスでは,startメソッドが呼ばれると, 実行キューに実行すべきスレッドが登録される. 登録されたスレッドが実行状態になると そのThreadのrunメソッドが呼ばれるという 具合に処理が進む. 実行は以下のようになる.
% javac ThreadTest.java
5 java ThreadTest
Thread test
end Start
hello 1 in Thread-1
hello 1 in Thread-2
hello 2 in Thread-1
hello 2 in Thread-2
hello 3 in Thread-1
hello 3 in Thread-2
startメソッドが送られてから

// Test.java

import java.io.*;

class EchoTread extends Thread {
  int i = 0;
  public void sleep(int a) {
  }
  public void run() {
    while (i++ < 3) {
      System.out.println("hello " + i + " in "
                    + getName());
      try {
        sleep(1000,300);  
      } catch (InterruptedException e) {
      }
    }
  }
}

public class Test {
    public static Runtime run = Runtime.getRuntime();
    public static void main(String argv[]){
        int i=0;        
        EchoTread th1 = new EchoTread();
        EchoTread th2 = new EchoTread();
        System.out.println("Thread test");
        th1.start();
        while (i++ < 100) {
            run.gc();
        }
        System.out.println("end Start1");
        th2.start();
        while (i++ < 100) {
            run.gc();
        }
        System.out.println("end Start2");
    }
}
という具合に,システムのgc(garbage collection)を呼び出すことに よって,時間がかかる処理を挿入すると, 次のようになる.

% javac Test.java
% java Test
Thread test
hello 1 in Thread-1
hello 2 in Thread-1
end Start1
end Start2
hello 1 in Thread-2
hello 3 in Thread-1
hello 2 in Thread-2
hello 3 in Thread-2


generated through LaTeX2HTML. M.Inaba 平成18年5月7日