聊聊高并发(四十四)解析java.util.concurrent各个组件(二十) Executors工厂类

Executor框架为了更方便使用,提供了Executors这个工厂类,通过一系列的静态工厂方法,可以快速地创建相应的Executor实例。 只有一个nThreads参数的newFixedThreadPool方法会创建一个ThreadPoolExecutor,corePoolSize和m...

2015-07-22 16:10:04

阅读数 3435

评论数 1

聊聊高并发(四十三)解析java.util.concurrent各个组件(十九) 任务的定时执行和周期执行

ExecutorService最后一块是定时/周期执行任务的接口ScheduledExecutorService。这篇说说ScheduledExecutorService相关的内容。 ScheduledExecutorService接口扩展了ExecutorService接口,在ExecutorS...

2015-07-21 16:15:49

阅读数 4127

评论数 0

聊聊高并发(四十二)解析java.util.concurrent各个组件(十八) 任务的批量执行和CompletionService

上一篇讲了ExecutorService关于任务的异步执行和状态控制的部分,这篇说说关于任务批量执行的部分。ExecutorSerivce中关于批量执行的

2015-07-20 15:16:48

阅读数 3529

评论数 0

聊聊高并发(四十一)解析java.util.concurrent各个组件(十七) 任务的异步执行和状态控制

这篇接着说ExecutorService相关内容。聊聊高并发(三十九)解析java.util.concurrent各个组件(十五) 理解ExecutorService接口的设计这篇说了ExecutorService接口扩展了Executor接口,在执行任务的基础上,提供了执行框架生命周期的管理,任...

2015-07-17 15:17:23

阅读数 3522

评论数 0

聊聊高并发(四十)解析java.util.concurrent各个组件(十六) ThreadPoolExecutor源码分析

ThreadPoolExecutor是Executor执行框架最重要的一个实现类,提供了线程池管理和任务管理是两个最基本的能力。这篇通过分析ThreadPoolExecutor的源码来看看如何设计和实现一个基于生产者消费者模型的执行器。 生产者消费者模型 生产者消费者模型包含三个角色:生产者...

2015-07-16 16:27:08

阅读数 4240

评论数 2

聊聊高并发(三十九)解析java.util.concurrent各个组件(十五) 理解ExecutorService接口的设计

上一篇讲了Executor接口的设计,目的是将任务的执行和任务的提交解耦,可以隐藏任务的执行策略。这篇说说ExecutorService接口。它扩展了Executor接口,对Executor的生命周期进行管理,并进行了进一步的扩展。 Executor负责执行任务。它的生命周期有3个:运行...

2015-06-26 17:22:40

阅读数 2443

评论数 0

聊聊高并发(三十八)解析java.util.concurrent各个组件(十四) 理解Executor接口的设计

JCU包中除了一系列的同步类之外,就是Executor执行框架相关的类。对于一个执行框架来说,可以分为两部分 1. 任务的提交 2. 任务的执行。 Executor接口设计的目的是专注于任务的执行,和任务的提交解耦。Executor接口封装了任务执行的细节,比如如何使用线程,是否定时执行等等。...

2015-06-25 17:33:15

阅读数 2506

评论数 0

实现一个支持运行时并发修改配置生效的Configuration类

可配置性是一个好的应用程序的重要指标。我们常常需要实现类似能够运行时修改配置的功能。最近在开发一个中间层的服务程序,最终发布的方式是把代码打成jar包交给调用方使用。这个中间层服务需要一些配置信息,考虑了一下有几个基本的需求: 1. 在ja包中提供一个service-defalut.propert...

2015-05-08 18:00:18

阅读数 2498

评论数 0

聊聊高并发(三十七)整理一下并发基础中的一些知识点

最近在准备并发基础的PPT,想到了一些知识点,记录下来以后也可以做个参考。大部分的知识点在之前的博客中都多少涉及到了 这里的并发基础指的是单机多处理器的情况下的一些并发问题,不涉及到分布式环境下的并发问题。 并发基础主要解决的是可见性,有序性和原子性的问题,让不可控的进程/线程变得可以预测,可...

2014-12-23 13:09:23

阅读数 5932

评论数 1

聊聊高并发(三十六)Java内存模型那些事(四)理解Happens-before规则

在前几篇将Java内存模型的那些事基本上把这个域底层的概念都解释清楚了,聊聊高并发(三十五)Java内存模型那些事(三)理解内存屏障 这篇分析了在X86平台下,volatile,synchronized, CAS操作都是基于Lock前缀的汇编指令来实现的,关于Lock指令有两个要点: 1. lo...

2014-12-19 11:53:35

阅读数 6597

评论数 13

聊聊高并发(三十五)Java内存模型那些事(三)理解内存屏障

在聊聊高并发(三十三)从一致性(Consistency)的角度理解Java内存模型 我们说了硬件层提供了满足某些一致性需求的能力,Java内存模型利用了硬件层提供的能力指定了一系列的语法和规则,让Java开发者可以隔绝这种底层的实现专注于并发逻辑的开发。这篇我们来看看硬件层是如何提供这些实现一致性...

2014-12-18 16:08:03

阅读数 11475

评论数 3

聊聊高并发(三十四)Java内存模型那些事(二)理解CPU高速缓存的工作原理

在上一篇聊聊高并发(三十三)从一致性(Consistency)的角度理解Java内存模型 我们说了Java内存模型是一个语言级别的内存模型抽象,它屏蔽了底层硬件实现内存一致性需求的差异,提供了对上层的统一的接口来提供保证内存一致性的编程能力。 在一致性这个问题域中,各个层面扮演的角色大致如下: 1...

2014-12-17 11:06:34

阅读数 12053

评论数 3

聊聊高并发(三十三)Java内存模型那些事(一)从一致性(Consistency)的角度理解Java内存模型

可以说并发系统要解决的最核心问题就是一致性的问题,关于一致性的研究已经有几十年了,有大量的理论,算法支持。这篇说说一致性这个主题一些经常提到的概念,理清Java内存模型在其中的位置。 一致性问题在单机器单CPU的情况下是最简单的,由于只有一个CPU,所有的读写操作都可以按照全局的时间顺序执行 ...

2014-12-15 14:31:07

阅读数 8743

评论数 1

聊聊ZooKeeper(一)分析ZooKeeper的Quorums机制--防止Split-Brain问题

使用过ZooKeeper的同学应该看到过一种说法,就是ZooKeeper集群中必须超过半数节点(Majority)可用,整个集群才能对外可用。这个说法在大多数情况下是正确的。这篇文章说说背后的原因。 实际上ZooKeeper提供了几种方式来认定整个集群是否可用,Majority只是其中的一种。...

2014-11-17 17:23:30

阅读数 6586

评论数 0

聊聊高并发(三十二)实现一个基于链表的无锁Set集合

Set表示一种没有重复元素的集合类,在JDK里面有HashSet的实现,底层是基于HashMap来实现的。这里实现一个简化版本的Set,有以下约束: 1. 基于链表实现,链表节点按照对象的hashCode()顺序由小到大从Head到Tail排列。 2. 假设对象的hashCode()是唯一的,...

2014-11-14 10:51:54

阅读数 5965

评论数 1

聊聊高并发(三十一)解析java.util.concurrent各个组件(十三) 理解Exchanger交换器

这篇讲讲Exchanger交互器,它是一种比较特殊的两方(Two-Party)栅栏,可以理解成Exchanger是一个栅栏,两边一方是生产者,一方是消费者, 1. 生产者和消费者各自维护了一个容器,生产者往容器里生产东西,消费者从容器里消费东西。 2. 当生产者的容器是满的时候,它需要通过Exch...

2014-11-12 18:04:35

阅读数 2816

评论数 0

聊聊高并发(三十)解析java.util.concurrent各个组件(十二) 理解CyclicBarrier栅栏

这篇讲讲CyclicBarrier栅栏,从它的名字可以看出,它是可循环使用的。它的功能和CountDownLatch类似,也是让一组线程等待,然后一起开始往下执行。但是两者还是有几个区别 1. 等待的对象不同。CountDownLatch的一组线程等待的是一个事件,或者说是一个计数器归0的事件。...

2014-11-12 14:00:10

阅读数 3869

评论数 0

聊聊高并发(二十九)解析java.util.concurrent各个组件(十一) 再看看ReentrantReadWriteLock可重入读-写锁

上一篇聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁 讲了可重入读写锁的基本情况和主要的方法,显示了如何实现的锁降级。但是下面几个问题没说清楚,这篇补充一下 1. 释放锁时的优先级问题,是让写锁先获得...

2014-11-12 10:38:18

阅读数 2931

评论数 0

聊聊高并发(二十八)解析java.util.concurrent各个组件(十) 理解ReentrantReadWriteLock可重入读-写锁

这篇讲讲ReentrantReadWriteLock可重入读写锁,它不仅是读写锁的实现,并且支持可重入性。

2014-11-11 17:37:28

阅读数 3724

评论数 0

聊聊高并发(二十七)解析java.util.concurrent各个组件(九) 理解ReentrantLock可重入锁

这篇讲讲ReentrantLock可重入锁,JUC里提供的可重入锁是基于AQS实现的阻塞式可重入锁。这篇 聊聊高并发(十六)实现一个简单的可重入锁 模拟了可重入锁的实现。可重入锁的特点是: 1. 是互斥锁,基于AQS的互斥模式实现,也就是说同时只有一个线程进入临界区,唤醒下一个线程时也只能释...

2014-11-11 15:46:07

阅读数 3260

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭