您的位置:首页 > 编程语言 > Java开发

Java多线程之Synchronized应用在static和非static方法上的区别

2017-03-03 18:20 393 查看
同步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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐