スレッド(排他制御)

  

●メソッドの定義と呼び出し

戻り値の型 メソッド名(引数リスト){
文;

return 式;
}

オブジェクトを指す変数名.メソッド名(引数リスト);  //メソッドの呼び出し
  

●synchronized

synchronized 戻り型 メソッド名(引数型 引数名) {
  メソッド本体
}

メソッドにsynchronizedという指定をつけると、あるスレッドがメソッドを処理している間は、 ほかのスレッドはこのメソッドを呼び出すことができなくなる。
  

●サンプル

//会社クラス
class Company{
  private int sum = 0;
  public synchronized void add(int a){  //振り込み処理
  
  int tmp = sum;
  System.out.println("現在、合計額は"+tmp+"円です");
  System.out.println(a+"円稼ぎました");
  tmp = tmp +a;
  System.out.println("合計額を"+tmp+"円にします");
  sum = tmp;
  }
}
//運転手クラス
class Driver extends Thread{
  private Company comp;
    public Driver(Company c)
    comp = c;
  }
  public void run(){
    for(int i=0; i<3; i++){
      comp.add(50);  //振り込み処理実行
    }
  }
}
class Sample7{
  public static void main(String args[]){
   Company cmp = new ompany();  //会社オブジェクトを作成
   
   Driver drv1 = new Driver(cmp);  //運転手オブジェクト1を作成
   drv1.start();  //スレッド起動
   
   Driver drv2 = new Driver(cmp);  //運転手オブジェクト2を作成
   drv2.start();  //スレッド起動
  }
}
  

●実行結果

 現在、合計額は0円です
 50円稼ぎました
 合計額を50縁にします
 …
 現在、合計額は250円です
 50円稼ぎました
 合計額を300円にします