JAvaマルチスレッド練習


ネット上でこのような試験問題を見て、マルチスレッドについて、ちょっと練習してください.
テーマ:南北方向の橋があって、一人しか収容できません.橋の両側にはそれぞれ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の中であってもなくてもよい.