Next: ごみ集め
Up: 10 マルチスレッド
Previous: 10 マルチスレッド
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日