java synchronized关键字

原创 2016年06月01日 21:21:14

关于synchronized,在java官方文档上有个很不错的介绍,这里简要小结下:

synchronized语义主要有两方面的含义:

  1. 确保同一时刻只有一个线程可以运行synchronized块中的内容;
  2. 实现了happens-before语义,即前面进程在synchronized中的修改对后面进程都是可见的(利用acquire和release语义实现,这是内存模型重要概念之一)

具体实现:(以synchronized non-static method为例)

对于每一个java对象都有一个内在锁(intrinsic lock),当一个线程访问一个被synchronized修饰方法时,该线程首先acquire该对象的intrinsic lock,然后在方法返回或者抛出异常的时候release该intrinsic lock,这样既保证了访问的唯一性,又保证了该线程的对数据的修改对其他线程都是可见的(happens-before)。
也就是说,一个线程访问一个对象的synchronized non-static method时,其他所有线程试图访问该对象的任何synchronized non-static method(当然也包括synchronized static method)都将被挂起,直到第一个线程访问结束。

而对于访问synchronized static method时,由于它并非由一个对象所拥有,所以会将与该类相关联的 Class Object 的实例进行加锁,因此此时所有其他打算对synchronized method进行访问的线程都将被挂起。

此外,synchronized还提供对部分代码片段进行同步操作,但需要指定其加锁的Object。

其他资料:

  1. 在知乎上有一个关于Object和Class这两个类的一个很有趣的问题
  2. 在javaworld中有关于在jvm如何实现synchronized的文章
版权声明:本文为博主原创文章,未经博主允许不得转载。

Java中Synchronized和Lock的使用和区别

转载自:http://blog.csdn.net/imzoer/article/details/9457639  Lock的锁定是通过代码实现的,而 synchronized 是在 JVM 层面...
  • zgrjkflmkyc
  • zgrjkflmkyc
  • 2016年03月02日 11:43
  • 3887

java并发之Lock与synchronized的区别

两者在锁的相关概念上区别: 1.可重入锁   如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配...
  • tomcat_2014
  • tomcat_2014
  • 2016年12月09日 18:03
  • 1170

Java多线程中 synchronized和Lock的区别

在上一节中, 我们已经了解了Java多线程编程中常用的关键字synchronized,以及与之相关的对象锁机制。这一节中,让我们一起来认识JDK 5中新引入的并发框架中的锁机制。 我想很多购买...
  • lingzhm
  • lingzhm
  • 2015年04月08日 21:28
  • 10921

synchronized关键字与Lock锁机制的区别问题

synchronized关键字与Lock锁机制的区别
  • a2279860a
  • a2279860a
  • 2017年01月19日 16:22
  • 903

java中synchronized关键字的认识&记录

通过具体项目中在线程间同步遇到的问题(app无响应ANR)来阐述synchronized关键字的使用场景。...
  • bibingyan
  • bibingyan
  • 2017年02月21日 20:27
  • 277

java的两种同步方式, Synchronized与ReentrantLock的区别

java在编写多线程程序时,为了保证线程安全,需要同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock。 相似点: 这两种同步方式有很多相似之处,它们都是加锁方式同...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年04月02日 19:37
  • 7013

java并发之Lock与synchronized的区别

1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;   2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致...
  • gongpulin
  • gongpulin
  • 2016年04月21日 19:22
  • 3276

Java关于Synchronized关键字在不同位置使用的理解

Java中的Syncronized关键字可以用来修饰同步方法:像这样synchronized void f() {/*body*/}和同步语句块:像这样synchronized(object){/*b...
  • yuyuanhuang
  • yuyuanhuang
  • 2015年03月10日 15:58
  • 2295

深入研究 Java Synchronize 和 Lock 的区别与用法

在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。 ...
  • natian306
  • natian306
  • 2014年01月19日 15:22
  • 35297

同步锁定Java synchronized详解(C#翻译)

java synchronized的c#实现 ? lock (new { }.GetType()){} ...
  • wlanye
  • wlanye
  • 2013年01月31日 10:58
  • 1439
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java synchronized关键字
举报原因:
原因补充:

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