Java--銀行存取款執行緒設計2(執行緒互斥)
阿新 • • 發佈:2019-01-29
同步:物件鎖的概念。如果多個執行緒共享某一個物件,作業系統會為每個物件用一個單詞生成一個鎖,鎖和物件一一對應。如果一個執行緒要對某個物件進行操作,必須拿到物件的鎖。
加鎖:同步語句或者同步方法(這裡用了同步語句)。解決互動執行緒與時間有關的錯誤。
注:互斥鎖必須是同一個物件,否則鎖不住。
public class save extends Thread{
private account a;
private double value;
public save(account a, double value) {
this.a = a;
this .value = value;
}
public void run() {
synchronized (a) {
double b = a.getBalance();
a.put(value);
System.out.println(a.getName() + "賬戶,現有" + b + ",存入" + value
+ ",餘額" + a.getBalance());
}
}
}
package cn.hncu.thread.motion;
public class fetch extends Thread{
private account a;
private double value;
public fetch(account a, double value) {
this.a = a;
this.value = value;
}
public void run() {
synchronized (a) {//拿鎖
double b = a.getBalance();
System.out.println(a.getName() + "賬戶,現有" + b + ",取出" + a.get(value)
+ ",餘額" + a.getBalance());
}//出了同步語句之後解鎖
}
}
package cn.hncu.thread.motion;
public class bank {
public static void main(String[] args) {
// account a1=new account("wang");
// save s1=new save(a1,100);
// save s1=new save(new account("wang"),100);
// s1.start();
account a1=new account("wang");
new save(a1,100).start();
new save(a1,200).start();
new fetch(a1,300).start();
new save(new account("xu"),100).start();
}
}