java concurrency
文章平均质量分 79
qqqqq1993qqqqq
这个作者很懒,什么都没留下…
展开
-
并发实战——“JUC线程池”之线程池原理01(简介,数据结构,调度)
本章内容:ThreadPoolExecutor简介ThreadPoolExecutor数据结构线程池调度ThreadPoolExecutor简介ThreadPoolExecutor是线程池类。对于线程池,可以通俗的将它理解为”存放一定数量线程的一个线程集合。线程池允许若干个线程同时允许,允许同时运行的线程数量就是线程池的容量;当添加的到线程池中的线程超过它的容量时,会有一部分线程阻塞等待。线转载 2017-07-17 15:36:43 · 482 阅读 · 0 评论 -
并发实战——“JUC线程池”之线程池原理02(源码解析)
本文内容:创建“线程池”添加任务到“线程池”关闭“线程池”拒绝策略创建“线程池” public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads,转载 2017-07-17 20:50:32 · 272 阅读 · 0 评论 -
并发实战——“JUC线程池”之线程池架构
本文内容:线程池架构线程池方法介绍线程池中线程的命名问题线程池架构线程池的架构图如下: 1.Executor它是”执行者”接口,它是来执行任务的。准确的说,Executor提供了execute()接口来执行已提交的 Runnable 任务的对象。Executor存在的目的是提供一种将”任务提交”与”任务如何运行”分离开来的机制。 它只包含一个函数接口:void execute(Runna转载 2017-07-17 13:56:35 · 258 阅读 · 0 评论 -
并发实战——并发相关知识点overview
本章内容:总结下并发有关问题(以某公司并发编程讲座为参考资料)1、java的并发模型和操作系统有关么?操作系统的不同会影响java中并发模型的实现方式。 Java在JVM层面抽象了一套自己的线程机制(里面的规则和操作系统层面的有一定相似性),用以映射不同的操作系统的任务调度。譬如早期不支持线程的操作系统,jvm在操作系统上面是一个进程,当这个进程被操作系统调度到后,jvm内部实现的线程库再调度原创 2017-07-15 22:17:49 · 304 阅读 · 0 评论 -
JVM——锁优化
锁优化HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、锁粗化(Lock Coarsening)、轻量级锁(Lightweight Locking)和偏向锁(Biased Locking)等,这些技术都是为了在线程之间更高效地共享数据,以及解决竞争问题,从而提高程序的执行效率。转载 2017-07-31 20:12:13 · 404 阅读 · 0 评论 -
ReentrantReadWriteLock分析
转自http://blog.csdn.net/vernonzheng/article/details/8297230一、ReentrantReadWriteLock与ReentrantLock 说到ReentrantReadWriteLock,首先要做的是与ReentrantLock划清界限。它和后者都是单独的实现,彼此之间没有继承或实现的关系。R转载 2017-08-19 11:43:04 · 253 阅读 · 0 评论 -
Condition源码分析
参考文献:http://www.jianshu.com/p/6b5aa7b7684c、http://ifeve.com/understand-condition/、http://www.cnblogs.com/cm4j/p/juc_condition.htmlCondition的使用通常我们会这样来new一个ConditionReentrantLock lock = new ReentrantLoc原创 2017-08-10 15:08:21 · 316 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码分析二(共享锁部分)
前言经过本系列的上半部分JDK1.8 AbstractQueuedSynchronizer的实现分析(上)的解读,相信很多读者已经对AbstractQueuedSynchronizer(下文简称AQS)的独占功能了然于胸,那么,这次我们再借助另一个工具类:CoutDownLatch,换个角度看看AQS的另外一个重要功能——共享功能的实现。AQS共享功能的实现在开始解读AQS的共享功能前...转载 2017-08-18 16:24:02 · 291 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码分析一(结合ReentrantLock)
http://ifeve.com/jdk1-8-abstractqueuedsynchronizer/(上) http://ifeve.com/jdk1-8-abstractqueuedsynchronizer-part2/(下)以下为部分重点摘录前言AbstractQueuedSynchronizer在JDK1.8中还有如下图所示的众多子类: 可以看到公平锁与非公平锁,包括ReentrantL原创 2017-08-09 23:29:08 · 342 阅读 · 0 评论 -
并发实战——原子类AtomicReference及底层源码CompareAndSwapObject分析
本文内容:分析原子类AtomicReference分析源码AtomicReference中public final boolean compareAndSet(V expect, V update) { return unsafe.compareAndSwapObject(this, valueOffset, expect, update); }public final原创 2017-07-16 21:10:48 · 11759 阅读 · 1 评论 -
三种方法实现生产者/消费者模型(Java)
一、wait() / notify()方法当所有生产者和消费者的目标都达成时,进程结束class Depot { private int capacity; // 仓库的容量 private int size; // 仓库的实际数量 public Depot(int capacity) { this.capacity = capacity;原创 2017-08-07 23:23:24 · 388 阅读 · 0 评论 -
JVM——Java中的线程安全
线程安全定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的它要求线程安全的代码都必须具备一个特征:代码本身封装了所有必要的正确性保障手段(如互斥同步等),令调用者无须关心多线程的问题,更无须自己采取任何措施来保证多线程的正确调用。Java语言中的转载 2017-07-31 18:55:51 · 473 阅读 · 0 评论 -
并发实战——理解JVM中的Happens-Before规则(可见性,volatile,双重检验锁)
在解释该规则之前,我们先看一段多线程访问数据的代码例子:public class Test1 { private int a=1, b=2; public void foo(){ // 线程1 a=3; b=4; } public int getA(){ // 线程2 return a; } pu原创 2017-07-18 11:18:26 · 2814 阅读 · 0 评论 -
并发实战——“JUC集合”之ArrayBlockingQueue
本文内容:阻塞队列介绍(主要看ReentrantLock和两个condition)源码分析Demo弱一致的迭代器ArrayBlockingQueue介绍ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。 线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。而有界,则是指ArrayBlockingQue转载 2017-07-18 20:15:03 · 365 阅读 · 0 评论