JAvaマルチスレッド練習
ネット上でこのような試験問題を見て、マルチスレッドについて、ちょっと練習してください.
テーマ:南北方向の橋があって、一人しか収容できません.橋の両側にはそれぞれ10人と12人がいて、多線プログラムを作成して彼らを対岸に到着させて、一人一人が1つのスレッドで表して、橋は資源を共有します.橋を渡る過程で誰が橋を渡るかとその方向を示します.
以下は私のコードです.
synchronizedキーワードの使い方がまだ完全に理解されていないので、runの中であってもなくてもよい.
テーマ:南北方向の橋があって、一人しか収容できません.橋の両側にはそれぞれ10人と12人がいて、多線プログラムを作成して彼らを対岸に到着させて、一人一人が1つのスレッドで表して、橋は資源を共有します.橋を渡る過程で誰が橋を渡るかとその方向を示します.
以下は私のコードです.
package test;
public class MyThread3 extends Thread {
private String name;
private String direction;
public MyThread3(String name, String direction) {
this.direction = direction;
this.name = name;
System.out.println(direction + " " + name + " ...");
}
public synchronized void run() {
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.direction + " " + this.name + " !"+"---"+Thread.currentThread().getName());
}
public static void main(String[] args) throws InterruptedException {
MyThread3[] ths = new MyThread3[12];
int i = 0;
boolean flag = true;
while (i <ths.length) {
if (i < 10)
ths[i] = new MyThread3(" " + (i+1) + " ",flag == false ? " " : " ");
else
ths[i] = new MyThread3(" " + (i+1) + " ", " ");
ths[i].start();
ths[i].join();
ths[i].sleep(1000);
flag = !flag;
if (flag == true||i>=10)
i++;
}
}
}
synchronizedキーワードの使い方がまだ完全に理解されていないので、runの中であってもなくてもよい.