// 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-2startメソッドが送られてから
// 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