一. 简介
CyclicBarrier 是一个让一系列线程集合互相等待直到一个公共屏障点(barrier point)的同步辅助工具。这个屏障被称为循环屏障,是因为它可以在等待线程释放后被重用。
CyclicBarrier 支持一个可选的 Runnable 命令,在最后一个线程到达后执行一次 Runnable 命令。
二. 简单使用示例
CyclicBarrier...
分类:
其他好文 时间:
2016-06-02 14:29:03
阅读次数:
180
基本原理Hashtable使用synchronized锁住整张Hash表,锁的粒度太大导致Hashtable性能低下。ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁...
分类:
其他好文 时间:
2016-06-02 14:04:53
阅读次数:
287
ArrayList关键属性分析 ArrayList采用Object数组来存储数据 /** * The array buffer into which the elements of the ArrayList are stored. * The capacity of the ArrayList i ...
分类:
其他好文 时间:
2016-05-31 14:03:00
阅读次数:
211
(最近在看JDK源码,只是拿着它的继承图在看,但很多东西不记录仍然印象不深,所以开始记录JDK阅读系列。) (一)Arrays Arrays比较特殊,直接继承自Arrays -》List(Interface) -》Collection(Interface)。 (Maybe因为Java中的数组本身就比 ...
分类:
编程语言 时间:
2016-05-26 14:22:38
阅读次数:
151
零. 简介
Executors 是 Executor、ExecutorService、ThreadFactory、Callable 类的工厂和工具方法。
一. 源码解析
创建一个固定大小的线程池:通过重用共享无界队列里的线程来减少线程创建的开销。当所有的线程都在执行任务,新增的任务将会在队列中等待,直到一个线程空闲。由于在执行前失败导致的线程中断,如果...
分类:
编程语言 时间:
2016-05-18 18:48:12
阅读次数:
269
1.一直想好好看看jdk的源码,虽然可以直接解压jdk安装目录下的src.zip文件后看,但是终究不方便;后来知道使用eclipse开发时可以直接查看底层源码,这里就总结了一下网上找到的 方法,下面就和大家分享:
相信很多朋友遇到过这样的问题:开发过程中会经常查看所引用的类(接口或方法)的源码,但是往往在查看JDK中的类(接口或方法)时出现提示页面“Source not found”,这是因为...
分类:
系统相关 时间:
2016-05-12 19:11:29
阅读次数:
378
首先我们来看JDK源码中Java.util.Vector的代码,剔除所有的方法和静态变量, Java.lang.Vector的核心代码如下: public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess ...
分类:
编程语言 时间:
2016-05-11 13:35:31
阅读次数:
305
JAVA为简化开发者开发提供了很多并发的工具,包括各种同步器,有了JDK我们只要学会简单使用类API即可。但这并不意味着不需要探索其具体的实现机制,本文从JDK源码角度简单讲讲并发时线程竞争的公平性。 所谓公平性指所有线程对临界资源申请访问权限的成功率都一样,不会让某些线程拥有优先权。我们知道CLH Node FIFO等待队列是一个先进先出的队列,那么是否就可以说每条线程获取锁时就是...
分类:
其他好文 时间:
2016-05-11 11:28:48
阅读次数:
203
JDK源码中,在研究AQS框架时,会发现很多地方都使用了CAS操作,在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性,java被隔离在硬件之上,明显力不从心,这时为了能直接操作操作系统层面,肯定要通过用C++编写的native本地方法来扩展实现。JDK提供了一个类来满足CAS的要求,sun.misc.Unsafe,从名字上可以大概知道它用于执行低级别、不安全的操作,AQS就是使用此类完...
分类:
编程语言 时间:
2016-05-10 11:04:27
阅读次数:
195
/** * Java编码格式个人推荐,参考JDK源码和Hyperic HQ源码(原spring旗下著名开源软件,现vmware)。 * @author * */ public class CodeRule { //声明变量,等号两边有空格。 private static int i = 1; //方 ...
分类:
编程语言 时间:
2016-05-09 18:19:22
阅读次数:
169