目录 1 基本实现原理 1.1 如何使用 1.2 设计思想 2 自定义同步器 2.1 同步器代码实现 2.2 同步器代码测试 3 源码分析 3.1 Node结点 3.2 独占式 3.3 共享式 4 总结 Java并发包(JUC)中提供了很多并发工具,这其中,很多我们耳熟能详的并发工具,譬如Reent ...
分类:
编程语言 时间:
2018-11-01 15:12:31
阅读次数:
209
J.U.C之AQS-介绍Java并发包(JUC)中提供了很多并发工具,这其中,很多我们耳熟能详的并发工具,譬如ReentrangLock、Semaphore,而它们的实现都用到了一个共同的基类--AbstractQueuedSynchronizer(抽象队列同步器),简称AQS。AQS是JDK提供的一套用于实现基于FIFO等待队列的阻塞锁和相关的同步器的一个同步框架,它使用一个int类型的vola
分类:
编程语言 时间:
2018-10-19 17:37:15
阅读次数:
195
一 前言 前面已经说到JUC中的锁主要是基于AQS实现,而AQS(AQS的内部结构 、AQS的设计与实现)在前面已经简单介绍过了。今天记录下JUC包下的锁是怎么基于AQS上实现的 二 同步锁 同步锁不是JUC中的锁但也顺便提下,它是由synchronized 关键字进行同步,实现对竞争资源互斥访问的 ...
分类:
编程语言 时间:
2018-10-07 12:11:13
阅读次数:
205
一、前言 在完成Map下的并发集合后,现在来分析ArrayBlockingQueue,ArrayBlockingQueue可以用作一个阻塞型队列,支持多任务并发操作,有了之前看源码的积累,再看ArrayBlockingQueue源码会很容易,下面开始正文。 二、ArrayBlockingQueue数 ...
分类:
其他好文 时间:
2018-09-11 17:59:25
阅读次数:
170
关于Condition接口 在并发编程中,每个Java对象都存在一组监视器方法,如wait()、notify()以及notifyAll()方法,通过这些方法,我们可以实现线程间通信与协作(也称为等待唤醒机制),如生产者-消费者模式,而且这些方法必须配合着synchronized关键字使用,关于这点, ...
分类:
其他好文 时间:
2018-09-05 17:54:04
阅读次数:
173
JMM怎么解决原子性、可见性、有序性的问题? 在java中提供了一系列和并发处理相关的关键字,比如volatile、synchronized、final、juc等,这些就是java内存模型封装了底层的实现后提供给开发人员使用的关键字,在开发多线程代码的时候,我们可以直接使用synchronized等 ...
分类:
编程语言 时间:
2018-09-05 09:16:10
阅读次数:
176
总结: 原子包提供了四种类型的原子类。包括基本数据类型,数组,引用类型,引用类型成员变量四种。 底层使用CAS操作保证原子性,CAS就是compare and swap先比较,如果是期望的值就进行交换。CAS是通过加总线锁或者使用内存锁定在硬件层面实现的。 CAS有一些缺点:1. 单个操作能够保证原 ...
分类:
编程语言 时间:
2018-08-28 11:33:14
阅读次数:
184
一、 主要算法思想: 采用了分治的思想:将一个大任务分割成不同的子任务,将线程放入不同的队列,一个线程对应一个队列。 1.“工作窃取算法”:某个线程执行完自己的队列里的任务时,会从其他队列里窃取任务来执行 2. 框架局限性: 存在竞争:双端队列里只有一个任务时 二、 应用 1. java8 中的pa ...
分类:
编程语言 时间:
2018-08-23 19:30:44
阅读次数:
157
AQS队列同步器学习 在学习并发的时候,我们一定会接触到 JUC 当中的工具,JUC 当中为我们准备了很多在并发中需要用到的东西,但是它们都是基于 来实现的,也就是我们如果能够去梳理清楚AQS当中的知识点,对我们以后了解其他并发功能键有很大的帮助。 CLH队列 队列同步器(AbstractQueue ...
分类:
编程语言 时间:
2018-08-23 10:09:56
阅读次数:
189
js判断PC端还是移动端 functiongoPAGE() { if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC| ...
分类:
移动开发 时间:
2018-08-16 19:41:28
阅读次数:
269