Java多线程之Synchronized应用在static和非static方法上的区别
来源:互联网 发布:讨鬼传2最美捏脸数据 编辑:程序博客网 时间:2024/04/30 18:10
同步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
0 0
- Java多线程之Synchronized应用在static和非static方法上的区别
- Java语言中synchronized 修饰在 static方法和 非static方法的区别
- Java中synchronized 修饰在 static方法和 非static方法的区别
- Java中synchronized 修饰在static方法和非static方法的区别
- synchronized 修饰在 static方法和 非static方法的区别
- synchronized 修饰在 static方法和非static方法的区别
- 多线程synchronized和synchronized static方法的区别
- Java多线程中Synchronized简介和Static Synchronized的区别
- Java多线程中Synchronized简介和Static Synchronized的区别
- 多线程下synchronized修饰static方法与非static方法的区别
- 多线程下synchronized修饰static方法与非static方法的区别
- java static块和static方法及static方法和非static方法的区别
- synchronized修饰static方法与非static方法的区别
- static方法和非static方法的区别(java)
- Java static synchronized 和 synchronized的区别
- synchronized关键字加到static静态方法和非static静态方法区别
- synchronized与static synchronized 的区别、synchronized在JVM底层的实现原理及Java多线程锁理解
- synchronized与static synchronized 的区别、synchronized在JVM底层的实现原理及Java多线程锁理解 (r)
- 怎么解决maven管理jar包冲突问题
- VMware使用nat模式使主机系统和虚拟系统通信
- Container With Most Water问题及解法
- C#oop体检套餐管理系统
- HPUOJ---2017寒假训练--专题3/A-Til the Cows Come Home(最短路-dijkstra)
- Java多线程之Synchronized应用在static和非static方法上的区别
- MUI框架学习之[事件取消][事件触发][手势事件][自定义事件]
- jdbcTemplate的queryForList
- xhprof php7问题
- String(字符串)数目统计
- android广播中实现弹出窗口
- Java源代码阅读——HashMap实现原理
- Java 8 有用的新特性
- android studio 发布app出错:please select the product flavors to build and sign