スレッド(排他制御)
●メソッドの定義と呼び出し
戻り値の型 メソッド名(引数リスト){
文;
…
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円にします