Java关键字系列 — volatile、synchronized、lock

原创 2017年01月04日 00:01:57

volatile、synchronized和lock是Java应对并发编程提出的三个比较常用的关键字,下面具体讲一下三个关键字的特征、具体应用场景。

volatile

控制层面
内存和CPU高速缓存

控制机制
控制主内存和CPU高速缓存的一致性,当一个线程更改了某个内存变量时,会强制更新主内存,并通知其他CPU从主内存中重新获取变量值。

应用场景
1. 对变量的写操作不依赖于当前值
2. 该变量没有包含在具有其他变量的不变式中

补充描述
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:
1. 可见性: 一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2. 有序性:禁止进行指令重排序

synchronized

控制层面
JVM层面

控制机制
控制某个方法的执行者或者是某个变量的拥有者。如果是方法锁,则同一时间只能有一个线程使用该方法,其他线程阻塞;如果是对象所,则哪个线程最先拥有锁对象,则哪个线程先执行,其他线程阻塞。

应用场景
1. 需要保证系统的原子性
2. 锁资源竞争不是很激烈

lock

控制层面
CPU总线

控制机制
控制线程的执行的CPU,在总线之下只允许一个线程的CPU可以访问某个内存,当某个线程执行结束之后其他线程才能访问变量资源

应用场景
1. 需要保证系统的原子性
2. 锁资源竞争相对较激烈

博客参考:http://www.cnblogs.com/dolphin0520/p/3920373.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

Synchronize 、 Lock和volatile的区别

synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。  lock:需要显示指定起始位置和终止位置。一般使用R...

java并发编程——四(synchronized\Lock\volatile) 锁机制原理及关联

前言其实标题使用互斥机制更合适,并发中主要两个问题是:线程如何同步以及线程如何通信。 同步主要是通过互斥机制保证的,而互斥机制我们最熟悉的就是锁,当然也有无锁的CAS实现。多线程共享资源,比如一个...
  • lemon89
  • lemon89
  • 2016年02月25日 23:10
  • 1147

java多线程并发(一)Semaphore,volatile,synchronized ,Lock, CyclicBarrier和CountDownLatch

在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。我们先看具体看一下这三个概念:1.原子性  原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,...

Java并发编程:Lock类和synchronized关键字区别

以下是本文目录大纲:   一.synchronized的缺陷   二.java.util.concurrent.locks包下常用的类   三.锁的相关概念介绍   若有不正之处请多多谅解,并...

java关键字volatile和synchronized在多线程中的应用

以前没有弄懂validate和synchronized,借此新开博之际记录下。 volatile(不稳定):java关键字用来修饰变量,不可用来修饰方法。 在java语法中对于变量值读写的操作...

Java——多线程总结、ThreadLocal/Volatile/synchronized/Atomic关键字

当线程被创建并启动之后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在其生命周期中,要经过”新建(New)”、”就绪(Runnable)”、”运行(Running’)”、”阻塞(Blocke...

学习java基础关键字之synchronized和volatile

synchronized、volatile、多线程
  • lifaqiu
  • lifaqiu
  • 2016年08月11日 10:02
  • 96

从Java内存模型理解synchronized、volatile和final关键字

你是否真正理解并会用volatile, synchronized, final进行线程间通信呢,如果你不能回答下面的几个问题,那就说明你并没有真正的理解: 1、对volatile变量的操作一定具有原子...

Java线程入门学习5----volatile和synchronized关键字

volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,如int、float、boolean等数据类型。如果这些简单数据类型声明为volatil...

Java单例模式及创建单例模式的多线程问题 volatile synchronized 关键字

to do!!!
  • d_good
  • d_good
  • 2017年01月06日 16:32
  • 249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java关键字系列 — volatile、synchronized、lock
举报原因:
原因补充:

(最多只允许输入30个字)