
并发
Alemand
这个作者很懒,什么都没留下…
展开
-
并发系列(十三)-----ReentrantReadWriteLock源码解析
一 简介读写锁如何正确的使用在上一篇的文章中简单的介绍了,并且已经知道读写锁内部维护了两个锁分别是读锁和写锁。下面是这两个锁的特点1,写锁是独占的、排他的,当一个线程持有写锁是,其他任何线程都不允许获取到锁不管是读锁还是写锁。2.读锁是共享的,允许多个线程同时访问资源。3.一个线程同时既可以持有读锁也可以写锁,获取顺序是先获取写锁后是可以获取读锁的这种现象较锁降级,但是不可以先获取...原创 2018-12-10 11:30:12 · 438 阅读 · 0 评论 -
并发系列(十二)-----ReentrantReadWriteLock的使用
一 简介ReentrantReadWriteLock翻译过是读写锁的意思。并发编程中我们可能会遇到读多写少的情况,面对这种情况的时候我们可以使用ReentrantLock或者synchronized来保证数据的正确性。如果上述两种方法的话,这样的话不管是读操作还是写操作都要去获取锁和是释放锁,但是实际上我们可能只需要在写的时候保证线程线程是安全的,并且写完之后读线程得到的是修改后的数据,也就是...原创 2018-12-05 17:38:12 · 368 阅读 · 0 评论 -
并发系列(十一)----- ReentrantLock的使用
一 简介ReentrantLock在中文的意思是重入锁与synchronized同步语意一样(具体的区别下面会总结),重入的意思是一个线程可以多次加锁,但是释放锁的时候要释放加锁的次数。ReentrantLock实现就是利用AQS独占模式,内部维护了一个AQS的子类Sync,Sync有两个子类FairSync和NofairSync这两个分别是ReentrantLock的两种锁,公平锁和非公平锁...原创 2018-11-27 18:51:19 · 384 阅读 · 0 评论 -
并发系列(十)-----AQS详解等待队列
一 简介前面几篇已经将AQS的框架,AQS的同步队列,AQS中的独占模式下资源获取,AQS共享模式下的资源的获取总结了一下,接下来就剩最后一部分了,等待队列。等待队列又叫条件队列,它只能使用在独占模式下。在我们阅读等待队列的时候要知道的一点是,等待队列中的线程是不会直接获取资源state的,它也是通过同步队列来获取资源的。一会在看源码中会说明。二 源码解析我们知道同步队列和条件队列都共...原创 2018-11-23 18:50:25 · 1673 阅读 · 0 评论 -
并发系列(九)-----AQS详解共享模式的资源获取与释放
一 简介 到目前为止已经知道了AQS中同步队列的基本的工作原理可以总结为维护同步队列,获取资源和改变线程状态。上一篇文章中主要总结了独占模式下的资源获取AQS详解独占模式资源的获取与释放。这篇主要总结一下AQS中的共享模式。 共享模式从字面上理解就是,这个资源可以被多个线程共享。在独占模式下,我们知道state的状态最初的值是0.如果某个线程获取到资源了state就加了1释放资源...原创 2018-11-22 16:27:00 · 1023 阅读 · 0 评论 -
并发系列(八)-----AQS详解独占模式资源的获取与释放
一 简介上一篇总结了AQS的整体架构,以及它的组成,和它们之间的关系。AQS主要的三部分分别是volatile修饰的变量、同步队列和等待队列其中,同步队列在上篇总结中已经介绍过了,不知道的话可以点这里AQS的框架组成以及同步队列源码解析。这一片文章主要总结独占模式下资源的获取。二 资源的获取源码解析在上一篇总结中,最后过源码的时候看到addWater(),同时我们也提出两个猜想获取资源...原创 2018-11-19 17:04:59 · 455 阅读 · 0 评论 -
并发系列(七)-----AQS详解同步对列
一 简介 AbstractQueuedSynchronizer,即队列同步器(简称AQS)。它是构建锁或者其他同步组件的基础框架。它的设计是基于模板方法模式的,也就是说,使用者需要继承同步器并重写指定的方法,随后将同步器组合在自定义同步组件的实现中,并调用同步器提供的模板方法,而这些模板方法将会调用使用者重写的方法。二 AQS的框架说明 AbstractQueuedSyn...原创 2018-11-15 14:29:20 · 451 阅读 · 0 评论 -
并发系列(六)-----concurrent的简单介绍
一 简介 concurrent包是jdk1.5引入的重要的包,主要代码由大牛Doug Lea完成。这个包下的一些类如果用好了可以很方便的保证数据在多线程下操作的正确性。就比如说线程共享的i++,如果使用concurrent包下的Atomic系列类可以很方便的解决这个问题。这篇文章简单的介绍Concurrent包,让你对Concurrent的整体有一个大体的了解,以及简单的了解它的实现原理。...原创 2018-10-26 17:22:39 · 734 阅读 · 0 评论 -
并发系列(五)-----线程详解
一 简介线程这个话题,不管是在面试中还是在工作中会经常的遇见。而并发编程的目的就是为了在尽量不影响程序的执行效率的情况下保证数据的安全性和正确性。要想理解线程首先要明白一些概念性的东西。进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自...原创 2018-10-19 13:42:43 · 250 阅读 · 0 评论 -
并发系列(四)-----CAS
一 简介保证Java中的原子操做方式有两种方式 1 加锁(可以理解悲观锁机制) 2 CAS(可以理解为乐观锁机制) CAS全称是Compare and Swap 即比较并替换。在JDK中许多地方都可以看到它的身影,比如AQS同步组件,Atomic原子类操作等等都是以CAS实现的。其中java.util.concurrent 中的许多概念源自 Doug Lea 的 util.con...原创 2018-07-30 11:30:16 · 309 阅读 · 0 评论 -
并发系列(三)-----volatile
一 简介 volatile关键字是轻量级的synchronized,volatile在并发编程中保证共享变量的可见性,当一个线程修改被volatile修饰的共享变量时,另外一个线程就能读到这个修改的值。volatile可以保证共享变量的可见性但不能保证复合操做的原子性:比如像i++这样的操做是volatile是不能保证的。二 volatile变量的特性被volatile修饰的变量...原创 2018-07-17 09:31:32 · 343 阅读 · 0 评论 -
并发系列(二)-----Java内存模型
一简介 在并发编程中,两个线程(A,B)同时操作一个普通变量的时候,会出现线程甲在操作变量时线程乙也将变量操作了,此时线程甲是无法感知变量发生变化的,造成变量改变错误。根据以上例子我们需要解决的问题就是线程之间的通信以及同步。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。java并发采用的是共享内存模型,Java的线程之间的通信总是隐式进行,整个通信对程序员玩完全透明。...原创 2018-07-07 16:16:44 · 382 阅读 · 0 评论 -
并发系列(一)-----synchronized关键字
一 简介说到并发不得不提的synchronized,synchronized关键字是元老级别的角色。在Java SE 1.6之前synchronized被称为是重量,在1.6之后对同步进行了一系列的优化,使它的“重量”发生变化。这篇文章主要介绍同步的原理和它“重量”变化二 表现形式 同步代码在表现的形式有三种同步在代码的表现形式有三种1.对于同步方法,锁是当前...原创 2018-07-02 14:32:50 · 396 阅读 · 0 评论 -
聊聊高并发系统之限流特技一
原文链接:http://www.jianshu.com/p/2596e559db5c最近一直都在研究压力测试客户端的问题,如果突破客户端压力测试线程,端口等问题,如果服务器端处理网络请求处理不过来,严重会造成宕机,在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流--------下面的原文链接----------------限流限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的...转载 2018-04-17 14:26:42 · 342 阅读 · 0 评论 -
Java实现定时任务
在工作中不免会碰到定时任务,我将我这次编写定时任务做一个记录,java中JDk提供了两种定时任务实现一.TimerTimer是最简单的一种定时任务实现代码如下import java.util.TimerTask;/** * <p> * 创建一个类继承TimerTask重写run方法 * </p> * * @author Alemand * @since 20...原创 2018-03-04 15:08:36 · 373 阅读 · 0 评论