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关键字

  • 2016年10月30日 16:26
  • 431KB
  • 下载

Java语言的关键字——synchronized

简介:Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码...

java多线程(四)synchronized关键字修饰方法

在之前的博客中我们介绍了条件对象和锁对象,两者结合使用才能起到比较好的互斥与同步效果,大家可能觉得有些麻烦,有没有将两者结合起来的工具呢,有!java提供了synchronized关键字来实现线程的互...

Java 多线程5:synchronized 关键字用法(修饰类,方法,静态方法,代码块)

在 多线程生成的原因(Java内存模型与i++操作解析) 中,介绍了Java的内存模型,从而可能导致的多线程问题。synchronized就是避免这个问题的解决方法之一。除了 synchronized...

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

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

Java synchronized关键字用法

Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 它修饰的对象有以下几种:  1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用...

java 线程同步:synchronized 关键字

在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在...

Java多线程(3)——同步与synchronized关键字

线程同步在单线程程序中,每次只做一件事情,后面的事情等待前面的事情完成才进行,但如果使用多线程程序,就会出现多个线程抢占资源的问题,线程的优先级部分地解决了这个问题,但还不够,Java提供线程同步机制...
  • picway
  • picway
  • 2016年10月11日 17:19
  • 721

java线程同步——条件对象+synchronized 关键字

【0】README0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java线程同步——竞争条件的荔枝+锁对象 的相关知识; 0.2)for full sou...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java synchronized关键字
举报原因:
原因补充:

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