1. 程式人生 > >Java--銀行存取款執行緒設計2(執行緒互斥)

Java--銀行存取款執行緒設計2(執行緒互斥)

同步:物件鎖的概念。如果多個執行緒共享某一個物件,作業系統會為每個物件用一個單詞生成一個鎖,鎖和物件一一對應。如果一個執行緒要對某個物件進行操作,必須拿到物件的鎖。
加鎖:同步語句或者同步方法(這裡用了同步語句)。解決互動執行緒與時間有關的錯誤。
注:互斥鎖必須是同一個物件,否則鎖不住。

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();
    }

}