Semaphore 源码分析

SemaphoreSemaphore 是基于同步器实现的计数信号量。Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。公平的信号量可以保证不会出现线程饥饿,而非公平的信号量可以提供更高的吞吐量。创建实例 private final Sync sync; /** * 信号量的同步器实现 */ abstract static class S...

Vert.x系列(二)--EventBusImpl源码分析

前言:Vert.x 实现了2种完成不同的eventBus: EventBusImpl(A local event bus implementation)和 它的子类 ClusteredEventBus(An event bus implementation that clusters with other Vert.x nodes)。这里介绍下EventBusImpl   EventBusImpl 原理:...

Java 集合系列(四)—— ListIterator 源码分析

器有能够检测到这种修改的功能,当发现集合被修改了,将会抛出一个 ConcurrentModificationException 异常   为什么出现上面的这些现象与问题呢,我们还是从源码中寻找答案吧 源码分析   有多个集合类根据自己的特点实现了 ListIterator 接口,其实现都大同小异,这里我们主要分析 LinkedList 中所实现的 ListIterator。   首先我们来分析 Linke...

Java容器类源码分析之Iterator与ListIterator迭代器(基于JDK8)

它时不必知道该集合对象底层的结构。Java类库中实现Iterator接口的迭代器只能正向遍历集合中的元素,而实现ListIterator接口的迭代器不仅能够正向遍历,还能够反向遍历集合中的元素。 二、源码分析 2.1、Iterator接口与ListIterator接口的继承与实现 图2.1  Java迭代器类的继承与接口实现(部分)       ListIterator接口继承了Iterator接口。在A...

并发编程之ThreadLocal源码分析

维持线程封闭性可以通过Ad-hoc线程封闭、栈封闭来实现,一种更加规范的方法是使用ThreadLocal类。ThreadLocal类提供线程局部变量,通过get、set等方法访问变量,为每个使用该变量的线程创建一个独立的副本。一、ThreadLocal使用案例案例中只开启了一个线程threadA,展示了在线程内部设置、获取、清除局部变量。public class ThreadLocalTest {...

英雄远征Erlang源码分析(9)-战斗流程解析

和战斗相关的模块有mod_battle.erl 当玩家进程和怪物进程被创建的时候都会通过mod_battle:start_link()创建一个战斗进程。 该战斗进程的state,用于保存玩家上次出手或者使用技能的时机,用于cd的判断 -record(state, {        last_attack_time=0,   % 上次出手时间        last_skill_time = []  %...

JDK 1.6 HashMap 源码分析

前言​ 前段时间研究了一下JDK 1.6 的 HashMap 源码,把部份重要的方法分析一下,当然HashMap中还有一些值得研究得就交给读者了,如有不正确之处还望留言指正。准备​ 需要熟悉数组和链表这两个基本数据结构。如果对链表不太熟悉的话,可以来几道leetcode上的相关的链表算法题。熟悉后看 HashMap 就会快很多了。​ 基本原理:HashMap中的基本数据结构是数组加链表。table...

死磕 java集合之ConcurrentHashMap源码分析(一)

,就只锁数组中的一项就可以了。(5)ReentrantLock可重入锁,是指一个线程获取锁之后再尝试获取锁时会自动获取锁,可重入锁的优点是避免死锁。其实,synchronized也是可重入锁。源码分析构造方法public ConcurrentHashMap() {} public ConcurrentHashMap(int initialCapacity) { if (initialCapa...

死磕 java集合之ConcurrentHashMap源码分析(三)——内含彩蛋

本章接着上两章,链接直达:死磕 java集合之ConcurrentHashMap源码分析(一)死磕 java集合之ConcurrentHashMap源码分析(二) 删除元素删除元素跟添加元素一样,都是先找到元素所在的桶,然后采用分段锁的思想锁住整个桶,再进行操作。public V remove(Object key) { // 调用替换节点方法 return replaceNode(key, nu...

死磕 java集合之HashSet源码分析

中的集合,这时候肯定是广义上的。再比如,下面我们讲的把另一个集合中的元素全部添加到Set中,这时候就是中义上的。HashSet是Set的一种实现方式,底层主要使用HashMap来确保元素不重复。源码分析属性 // 内部使用HashMap private transient HashMap<E,Object> map; // 虚拟对象,用来作为value放到map中 private static f...
关于我们 联系我们 友情链接 LMLPHP后院 
本站由 LMLPHP 强力驱动 ©2014-2020 LMLPHP 耗时0.057205(s)
2020-06-02 13:27:49 1591075669