同步:對象鎖的概念。如果多個線程共用某一個對象,作業系統會為每個對象用一個單詞產生一個鎖,鎖和對象一一對應。如果一個線程要對某個對象進行操作,必須拿到對象的鎖。
加鎖:同步語句或者同步方法(這裡用了同步語句)。解決互動線程與時間有關的錯誤。
註:互斥鎖必須是同一個對象,否則鎖不住。
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(); }}