
Java并发来一发
文章平均质量分 93
WalkOffTheEarth
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java并发来一发(十四)ThreadLocal
1、ThreadLocal简介 java.lang.ThreadLocal是线程本地变量,意为每个线程私有的变量,不同线程间不共享。 它的意义在于线程间的数据隔离。 ThreadLocal有个内部类ThreadLocalMap,key就是当前线程,value就是线程正在执行的任务中的某个变量的包装类Entry。 2、ThreadLocal使用姿势 ThreadLocal变量需要定义为st...原创 2018-12-11 15:53:13 · 182 阅读 · 0 评论 -
Java并发来一发(九)ReentrantReadWriteLock
一、ReentrantReadWriteLock简介 ReentrantReadWriteLock允许同一时间有一个写线程或多个读线程,满足了对读写并发控制有不同需求的场景,相对于排他锁,提高了并发性。在实际应用中,大部分情况下对共享数据(如缓存)的访问都是读操作远多于写操作,因此JDK提供了这个读写锁。ReentrantReadWriteLock支持以下特性: 支持公平和非公平的获取锁的方式...原创 2018-12-03 18:36:09 · 164 阅读 · 0 评论 -
Java并发来一发(八)ReentrantLock
一、ReentrantLock简介 ReentrantLock可重入锁,全名java.util.concurrent.locks.ReentrantLock,相当于是个最基础版本的Lock的实现,针对公平锁和非公平锁,ReentrantLock都有实现。 二、ReentrantLock特性 1、可轮询锁和定时锁 可以通过调用trylock方法,查询锁的状态,如果锁已经被其他线程持有,则不会...原创 2018-12-03 17:53:22 · 212 阅读 · 0 评论 -
Java并发来一发(十六)分布式事务一致性
目录 一、概论 二、CAP定理 三、BASE理论 四、2PC 五、3PC 六、XA协议 七、TCC模型 八、Raptor 一、概论 系统或DB的拆分会使得数据服务往往不在一个单点系统中,数据一致性也就变成了分布式事务问题。本文主要讨论分布式事务一致性解决方案。 一致性可理解为所有节点都能访问到最新版本的数据,单机情况下使用共享内存和锁就可以解决,但在分布式环境下,要满足一致性...原创 2018-12-12 18:27:23 · 431 阅读 · 0 评论 -
Java并发来一发(七)队列同步器AQS
一、AQS简介 队列同步器AbstractQueuedSynchronizer(简称AQS)是用来构建锁或其他同步组件的基础框架,它服务的是锁的实现者。AQS有一个变量表示同步状态,通过内置的FIFO管理线程排队,基于AQS可以将同步状态管理、线程排队、等待与唤醒等操作对锁屏蔽,简化锁的实现方式。 同步器的设计是基于模板方法的,使用者需要重写同步器指定的方法,然后将同步器组合在自定义同步组件的...原创 2018-12-03 15:34:18 · 208 阅读 · 0 评论 -
Java并发来一发(六)Lock接口
一、Lock接口的引入 由于synchronized关键字有些缺陷,如无法响应中断等,出现了Lock接口。相对于synchronized,Lock有如下补充: Lock可以响应中断; Lock可以得知线程是否已经获得锁; Lock可以提供更为复杂的读写锁,以应对读写同时存在的场景。 Lock相对于synchronized还有如下区别: synchronized是Java关键字,是基于JV...原创 2018-12-03 10:57:13 · 184 阅读 · 0 评论 -
Java并发来一发(四)volatile关键字
一、volatile特性 volatile的两点特性:禁止指令重排序、保证内存可见性。volatile不能保证原子性。 1、禁止指令重排 原理:volatile关键字通过提供内存屏障的方式来防止指令被重排序,编译器在生成字节码时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序。 volatile禁止指令重排序的一些规则: 在每个volatile写操作前插入StoreStore屏障...原创 2018-11-30 21:13:57 · 176 阅读 · 0 评论 -
Java并发来一发 --- 目录
1、Java内存模型 Java并发来一发(一)Java内存模型 2、多线程和线程池 Java并发来一发(二)多线程四种实现方式 Java并发来一发(三)Java线程池 3、volatile和synchronized Java并发来一发(四)volatile关键字 Java并发来一发(五)synchronized关键字 4、Java中的锁 Java并发来一发(六)Lock接口 J...原创 2018-11-30 18:20:59 · 199 阅读 · 0 评论 -
Java并发来一发(五)synchronized关键字
目录 一、synchronized底层原理 二、JVM对sychronized的优化 三、synchronized特性 一、synchronized底层原理 1、Java对象头与Monitor JVM中对象在堆内存中的数据分为三部分,对象头、实例数据和对齐填充。其中,对象头的内容包括Mark Word和类元数据,而Mark Word默认情况下存储着对象的HashCode、分代年龄、锁位...原创 2018-12-02 23:01:29 · 270 阅读 · 0 评论 -
Java并发来一发(十三)线程的等待与通知机制
本文介绍的是Object的监视器方法wait/notify等,一般与sychronized关键字配套使用。 相关方法如下,所有方法使用的前提都是先获得锁: wait(),调用该方法后线程进入等待状态,线程加入到等待队列,直到另一个线程通知或中断。 wait(long),线程进入超时等待状态,线程加入到等待队列,直到另一个线程通知或中断,或过一定毫秒数后返回。 wait(long,int),...原创 2018-12-04 21:19:58 · 216 阅读 · 0 评论 -
Java并发来一发(三)Java线程池
目录 一、线程池概念 二、线程池状态 三、Excecutors四种创建线程池方法 四、Java中的ThreadPoolExecutor类 五、线程执行流程 六、一个简单的线程池实现 一、线程池概念 线程池是一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代...原创 2018-11-30 11:05:31 · 354 阅读 · 2 评论 -
Java并发来一发(十二)CountDownLatch和CyclicBarrier
一、CountDownLatch java.util.concurrent.CountDownLatch可以允许一个或多个线程等待其他线程操作。从countdown字面意义也可以理解,它是类似于一个倒计时锁,这个倒计时是原子操作,同一时刻只能有一个线程操作倒计时。 CountDownLatch应用实例,短跑比赛计排名,代码如下: public class CountDownLatchTes...原创 2018-12-04 12:28:19 · 174 阅读 · 0 评论 -
Java并发来一发(十一)Java中的原子操作类
一、原子操作类简介 JDK1.5开始提供了java.util.concurrent.atomic包,其中有一系列用法简单、性能高效、可以线程安全更新变量的原子操作类,目前(JDK1.7)大概有这么些: 二、原子操作类实现原理 以AtomicInteger为例看下源码,其中的两个方法getAndSet,getAndIncrement,都是无限循环调用compareAndSet,直到成功,C...原创 2018-12-04 11:37:30 · 202 阅读 · 0 评论 -
Java并发来一发(十)Condition接口
一、Condition接口简介 java.util.concurrent.locks.Condition是java并发包中的一个接口,是为配合Lock提供的线程等待/通知功能。我们知道Object的监视器方法wait()和notify()配合sychronized关键字一样可以实现等待/通知机制,Condition的优势在于它可以为多个线程间建立不同的Condition,控制粒度更细。如阻塞队列...原创 2018-12-04 11:16:11 · 216 阅读 · 0 评论 -
Java并发来一发(一)Java内存模型
目录 一、原子性、可见性和有序性 二、JMM概念 三、指令重排 四、happens-before规则 一、原子性、可见性和有序性 提到并发编程就得搞清楚原子性、可见性、有序性这三大性质,搞不清这三个性质,后面的概念也就很模糊。 1、原子性 概念:一个操作或多个操作,要么全部执行且执行过程不被中断,要么不执行。 如何保证原子性:synchronized关键字或Lock可以保证原子性...原创 2018-11-29 15:52:40 · 181 阅读 · 0 评论 -
Java并发来一发(二)多线程四种实现方式
Java实现多线程的方式 Java实现多线程的方式有4种: 继承Thread方法、实现Runnable接口、实现Callable接口并通过FutureTask创建线程、使用ExecutorService。 其中,前两种线程执行结果没有返回值,后两种是有返回值的。 1、继承Thread方法 Thread类实现了Runnable接口,通过调用start()方法启动线程。 这种方式实现多线程...原创 2018-11-24 21:12:04 · 471 阅读 · 0 评论 -
Java并发来一发(十五)zookeeper
一、zookeeper简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 简单地说,zookeeper维护了一个类似于文件系统的树状结构,结构上的节点znode可以自由地增删,当节点发生变动时,zookeeper会通知客户端。 为了...原创 2018-12-12 15:53:17 · 232 阅读 · 0 评论