同步static方法:
public class Bank implements Runnable{
static int money = 2700;
//注意区别
public static synchronized void Withdraw() {
//public synchronized void Withdraw() {
for(int i=0; i<3;i++){
int temp = money;
temp = temp-300;
money = temp;
System.out.println(Thread.currentThread().getName()+" "+money);
}
}
public void run(){
Withdraw();
}
public static void main(String[] args) throws InterruptedException {
Bank b1 = new Bank();
Bank b2 = new Bank();
Bank b3 = new Bank();
Thread t1 = new Thread(b1,"b1");
Thread t2 = new Thread(b2,"b2");
Thread t3 = new Thread(b3,"b3");
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println("The remaining money is "+money);
}
}
结果为:
b1 2400
b1 2100
b1 1800
b2 1500
b2 1200
b2 900
b3 600
b3 300
b3 0
The remaining money is 0
同步非static方法:
public class Bank implements Runnable{
static int money = 2700;
//注意区别
//public static synchronized void Withdraw() {
public synchronized void Withdraw() {
for(int i=0; i<3;i++){
int temp = money;
temp = temp-300;
money = temp;
System.out.println(Thread.currentThread().getName()+" "+money);
}
}
public void run(){
Withdraw();
}
public static void main(String[] args) throws InterruptedException {
Bank b1 = new Bank();
Bank b2 = new Bank();
Bank b3 = new Bank();
Thread t1 = new Thread(b1,"b1");
Thread t2 = new Thread(b2,"b2");
Thread t3 = new Thread(b3,"b3");
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println("The remaining money is "+money);
}
}
结果为:
b2 2100
b3 2100
b1 2100
b3 1500
b2 1800
b3 900
b1 1200
b2 600
b1 300
The remaining money is 300