////////////////////////////////////////////////////////////////////////////////
//  << j531a.java >>
//
//  スレッド(3):同期(同期がとれていない例)
//
//    複数のスレッドを同時に実行し、同期がとれないことを確認する。
//
//  (1)Compクラスの定義。
//     複数のスレッドからアクセスされる。
//  (2)スレッド(Thread1)の定義
//  (3)スレッドの個数の設定。
//  (4)Compクラスのオブジェクトの作成。
//  (5)複数のスレッドを格納する配列の準備。
//  (6)スレッドの作成。
//  (7)スレッドの実行。
//  (8)待機時間。
//
////////////////////////////////////////////////////////////////////////////////

//(1)
class Comp {
  void execute() {
    System.out.println("(" + Thread.currentThread().getName() + "):開始");
    try {
      Thread.sleep(1000);
    } catch ( InterruptedException e ) { }
    System.out.println("  (" + Thread.currentThread().getName() + "):終了");
  }
}

//(2)
class Thread1 extends Thread {
  Comp obj;
  Thread1(Comp obj) { // コンストラクタ。
    this.obj = obj;
  }
  public void run() {
    obj.execute();
  }
}
  
class j531a {
  public static void main(String args[]) {

    int n = 9; //(3)

    Comp obj = new Comp(); //(4)
   
    Thread1 th[] = new Thread1[n]; //(5) 
    for( int i=0; i<n; i++ ) {
      th[i] = new Thread1(obj); //(6) 
      th[i].start(); //(7)
    }

  }

}
実行結果
% javac j531a.java
% java j531a
(Thread-0):開始
(Thread-8):開始
(Thread-1):開始
(Thread-7):開始
(Thread-6):開始
(Thread-5):開始
(Thread-4):開始
(Thread-3):開始
(Thread-2):開始
  (Thread-0):終了
  (Thread-8):終了
  (Thread-1):終了
  (Thread-7):終了
  (Thread-6):終了
  (Thread-5):終了
  (Thread-4):終了
  (Thread-3):終了
  (Thread-2):終了