从头认识java-17.4 详解同步(4)-同步阻塞、synchronized和volatile
来源:互联网 发布:增加一列的sql语句 编辑:程序博客网 时间:2024/06/08 13:57
这一章节我们来介绍同步阻塞、synchronized和volatile。
1.同步阻塞
之前我们提到过synchronized放在同步方法上:
public synchronized void transfer(int fromAccount, int toAccount,double money) {if (accounts[fromAccount] < money) {return;}accounts[fromAccount] -= money;System.out.printf("从" + fromAccount + "账户转出%10.2f元,", money);accounts[toAccount] += money;System.out.printf("从" + toAccount + "账户转入%10.2f元,", money);System.out.printf("总数:%10.2f元", getTotal());System.out.println();}
其实他的等价代码是这样的:
private Object lock = new Object();public void transfer(int fromAccount, int toAccount, double money) {synchronized (lock) {if (accounts[fromAccount] < money) {return;}accounts[fromAccount] -= money;System.out.printf("从" + fromAccount + "账户转出%10.2f元,", money);accounts[toAccount] += money;System.out.printf("从" + toAccount + "账户转入%10.2f元,", money);System.out.printf("总数:%10.2f元", getTotal());System.out.println();}}
上面的lock扮演的就是我们平常所说的那把锁,只有持有这把锁,线程才能进入方法进行操作,而synchronized就是控制这把锁一次只能给一个线程持有,从而实现同步阻塞。
2. volatile
volatile是另一种实现线程阻塞的方法,但是他具有局限性:就是只完成变量赋值,而不执行其他操作。
可行的方式:
package com.ray.ch17;public class Test {private volatile boolean isDone;public boolean isDone() {return isDone;}public void setDone(boolean isDone) {this.isDone = isDone;}}
等价代码:
package com.ray.ch17;public class Test {private boolean isDone;public synchronized boolean isDone() {return isDone;}public synchronized void setDone(boolean isDone) {this.isDone = isDone;}}
不可行的方式:
package com.ray.ch17;public class Test {private volatile boolean isDone;public void flipDone() {isDone = !isDone;}}
总结:这一章节主要介绍同步阻塞和volatile的使用情况。
这一章节就到这里,谢谢。
-----------------------------------
目录
0 0
- 从头认识java-17.4 详解同步(4)-同步阻塞、synchronized和volatile
- 从头认识java-17.4 详解同步(3)-对象锁
- 从头认识java-17.4 详解同步(5)- 死锁
- Java线程同步synchronized和volatile
- 【Java多线程】-线程同步synchronized和volatile
- 从头认识java-17.4 详解同步(2)-详解竞争条件
- 从头认识java-18.6 synchronized在其他对象上同步和ThreadLocal来消除共享对象的同步问题
- Java线程篇(二):线程同步(synchronized和volatile)
- Java线程(二)----线程同步synchronized和volatile
- Java多线程(二):线程同步synchronized和volatile
- 从头认识java-17.4 详解同步(1)-由竞争条件引发的问题
- 线程同步synchronized和volatile
- 线程同步synchronized和volatile
- 线程同步synchronized和volatile
- 线程同步synchronized和volatile
- 线程同步synchronized和volatile
- java 同步(synchronized)详解
- Java并发——线程同步volatile与synchronized详解
- [iOS]抓包工具Charles简单使用
- 桥接模式
- Java SE7新特性之try-with-resources语句
- tomcat源码下载并导入eclipse
- 【原创】iOS开发入门教程
- 从头认识java-17.4 详解同步(4)-同步阻塞、synchronized和volatile
- 16-01-13 TextView 跑马灯属性设置
- Intellij Idea快捷键
- 构建MAVEN项目
- VS2013中安装配置和使用Boost库
- css选择器优先级
- 【综合】几种数据载体的比较
- Windows Embedded CE OS 零基础开发
- Linux主机加入zabbix监控