Synchronized之二:synchronized的实现原理
摘要:Java提供了synchronized关键字来支持内在锁。Synchronized关键字可以放在方法的前面、对象的前面、类的前面。 当线程调用同步方法时,它自动获得这个方法所在对象的内在锁,并且方法返回时释放锁,如果发生未捕获的异常,也会释放锁。当调用静态同步方法时,因为静态方法和类相关联,线程获得
阅读全文
posted @
2015-08-20 17:32
duanxz
阅读(1342)
推荐(0)
synchronized总结:怎么保证可见性、有序性、原子性
摘要:通过前面的篇章我们知道 synchronized 底层实际上通过JVM来实现的,同一时间只能有一个线程去执行synchronized 中的代码块。 一、原子性 原子性:既然同一时间只有一个线程去运行里面的代码,那么这个操作就是不能被其它线程打断的,所以这里天然就具有原子性了。 二、可见性 我们继续来
阅读全文
posted @
2015-05-11 16:05
duanxz
阅读(1462)
推荐(3)
Synchronized之三:实现原理
摘要:一、Java源代码级别 synchronized(对象) 字节码层级 使用idea插件jclasslib插件查看字节码,我们以之前代码为例 在字节码层面是以monitorenter作为开始锁的开始,以moniterexit作为结束。 汇编级别 我们使用hsdis工具对Java源码进行反编译为汇编代码
阅读全文
posted @
2015-05-11 14:03
duanxz
阅读(6034)
推荐(3)
java并发3JDK8的各种锁
摘要:1 各种锁的概念与实现与实现原理1.1 悲观锁VS乐观锁1.1.1 概念:1.1.2 实现:1.1.3 原理:1.2 公平锁VS非公平锁1.2.1 概念:1.2.2 实现:1.2.3 实现:1.3 重入锁VS不可重入锁1.3 .1 概念:1.3 .2 实现:1.3 .3 实现:1.4 共享锁VS排它
阅读全文
posted @
2015-05-11 13:56
duanxz
阅读(1396)
推荐(0)
Synchronized之四:Synchronized的可重入性
摘要:本文里面讲的是广义上的可重入锁,而不是单指JAVA下的ReentrantLock。 可重入锁,也叫做递归锁,指的是同一线程外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。在JAVA环境下ReentrantLock 和synchronized 都是可重入锁。 一、synchroni
阅读全文
posted @
2015-05-09 09:13
duanxz
阅读(1956)
推荐(0)
内部锁之一:锁介绍(偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景)
摘要:一、内部锁介绍 上篇文章《Synchronized之二:synchronized的实现原理》中向大家介绍了Synchronized原理及优化锁。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex
阅读全文
posted @
2015-04-26 20:52
duanxz
阅读(2770)
推荐(1)
ReentrantReadWriteLock读写锁的使用
摘要:Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代
阅读全文
posted @
2014-11-11 09:12
duanxz
阅读(407)
推荐(0)
JAVA中线程同步的方法(7种)汇总
摘要:同步的方法: 一、同步方法 即有synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。 注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会
阅读全文
posted @
2014-05-05 16:51
duanxz
阅读(50491)
推荐(4)
锁分类(独占锁、分拆锁、分离锁、分布式锁)
摘要:一、java内存模型 提到同步、锁,就必须提到Java的内存模型,为了提高程序的执行效率,java也吸收了传统应用程序的多级缓存体系。 在共享内存的多处理器体系架构中,每个处理器都拥有自己的缓存,并且定期地与主内存进行协调。在不同的处理器架构中提供了不同级别的缓存一致性(Cache Coherenc
阅读全文
posted @
2014-03-03 15:59
duanxz
阅读(5698)
推荐(1)
Lock的实现原理
摘要:1. Lock 的简介及使用 Lock是java 1.5中引入的线程同步工具,它主要用于多线程下共享资源的控制。本质上Lock仅仅是一个接口(位于源码包中的java\util\concurrent\locks中),它包含以下方法 Lock有三个实现类,一个是ReentrantLock,另两个是Ree
阅读全文
posted @
2014-02-21 15:23
duanxz
阅读(13328)
推荐(0)
分布式锁实现:数据库、redis、zookeeper、memcache
摘要:们知道分布式锁的特性是排他、避免死锁、高可用。分布式锁的实现可以通过数据库的乐观锁(通过版本号)或者悲观锁(通过for update)、Redis的setnx()命令、Zookeeper(在某个持久节点添加临时有序节点,判断当前节点是否是序列中最小的节点,如果不是则监听比当前节点还要小的节点。如果是
阅读全文
posted @
2014-01-07 18:51
duanxz
阅读(1164)
推荐(0)
Condition-线程通信更高效的方式
摘要:Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 那么引入本篇的主角,Condition,Condition 将 Object 监视器方法(wa
阅读全文
posted @
2014-01-06 11:06
duanxz
阅读(1352)
推荐(0)
Java中的ReentrantLock和synchronized两种锁定机制的对比--删除
摘要:多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和 vo
阅读全文
posted @
2013-12-19 15:19
duanxz
阅读(488)
推荐(0)
深入理解StampedLock及其实现原理
摘要:背景(注释): 一个基于容量并且带有三种模式的锁,用于控制读取/写入访问。StampedLock的状态由版本和模式组成。锁获取操作返回一个用于展示和访问锁状态的邮编(stamp)变量:这些方法的"try"版本通过返回0代表获取锁失败。锁释放以及其他相关方法需要使用邮编(stamps)变量作为参数,如
阅读全文
posted @
2012-08-27 13:41
duanxz
阅读(1623)
推荐(0)
AQS:AbstractQueuedSynchronizer超详细原理解析
摘要:今天我们来研究学习一下AbstractQueuedSynchronizer类的相关原理,java.util.concurrent包中很多类都依赖于这个类所提供队列式同步器,比如说常用的ReentranLock,Semaphore和CountDownLatch等。 为了方便理解,我们以一段使用Reen
阅读全文
posted @
2012-08-09 13:23
duanxz
阅读(683)
推荐(0)
JAVA CAS原理、unsafe、AQS
摘要:concurrent包的实现 由于java的CAS同时具有 volatile 读和volatile写的内存语义,因此Java线程之间的通信现在有了下面四种方式: A线程写volatile变量,随后B线程读这个volatile变量。 A线程写volatile变量,随后B线程用CAS更新这个volati
阅读全文
posted @
2012-08-08 16:24
duanxz
阅读(2167)
推荐(1)
linux文件锁flock
摘要:目录 《linux文件锁flock》 《NIO文件锁FileLock》 一、文件锁基本概念 Linux中软件、硬件资源都是文件(一切皆文件),文件在多用户环境中是可共享的。 文件锁是用于解决资源的共享使用的一种机制:当多个用户需要共享一个文件时,Linux通常采用的方法是给文件上锁,来避免共享的资源
阅读全文
posted @
2012-06-21 11:02
duanxz
阅读(1455)
推荐(0)