- 博客(10)
- 收藏
- 关注
原创 AQS之其他同步组件
Semaphore允许多个线程同时访问。Syn类实现共享模式。构造函数permits:允许访问最大线程数fair:指定是否是公平锁,默认false。 public Semaphore(int permits) { sync = new NonfairSync(permits); } public Semaphore(int permits, bool...
2019-08-13 10:57:29 112
原创 AQS之ReentrantLock,ReentrantReadWriteLock
ReentrantLock独占锁,可重入属性 private final Sync sync;实现Lock接口,重写方法 public void lock() { sync.acquire(1); } public void lockInterruptibly() throws InterruptedException { sync...
2019-08-12 22:30:22 153
原创 并发容器之队列
线程安全的队列分为阻塞队列和非阻塞队列。非阻塞队列ConcurrentLinkedQueue使用 CAS 非阻塞算法来实现线程安全,无界非阻塞队列属性 transient volatile Node<E> head; private transient volatile Node<E> tail;构造方法 public ConcurrentLin...
2019-08-12 21:15:14 109
原创 并发容器之CopyOnWriteArrayList
属性:在JDK11中,将reentrantLock改为关键字synchronized //锁 final transient Object lock = new Object(); //数组,保存数据 private transient volatile Object[] array;在CopyOnWriteArrayList中不需要想ArrayList一样记...
2019-08-12 19:41:45 133
原创 Comparable与Comparator接口
Comparable接口属于java.lang包,需要重写compareTo(Object obj)方法,obj表示要比较的对象public void test1(){Integer i1 = 3;Integer i2 = 7;System.out.println(i2.compareTo(i1));//1}在Integer、Character等类中都实现了此接口。 p...
2019-08-12 19:17:26 116
原创 并发容器之ConcurrentHashMap
目录源码分析(JDK1.8)JDK1.7ConcurrentHashMap与HashMapConcurrentHashMap与HashTable源码分析(JDK1.8)底层数据结构 数组+链表+红黑树(数组大小是2的幂次方)实现原理 采用CAS和synchronized关键字注:ConcurrentHashMap的hash算法、求桶索引与HashMap类似,不再赘述。数据结构 v...
2019-08-12 19:02:35 150
原创 Iterator接口源码分析
Iterator接口中的主要方法:public interface Iterator<E> { boolean hasNext();//判断是否有下一个元素 E next();//获取下一个元素 default void remove() {//删除元素 throw new UnsupportedOperationException("remo...
2019-08-12 17:50:15 124
原创 HashSet,LinkedHashSet源码分析
HashSetHashSet 是一个没有重复元素的集合 。由HashMap实现,不保证元素的顺序,允许null 。 private transient HashMap<E,Object> map; //定义一个静态的Object对象,来充当HashMap的value private static final Object PRESENT = new...
2019-08-12 17:02:33 94
原创 HashMap,HashTable,LinkedHashMap源码分析
Entry:static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next; Node(int hash, K key, V value,...
2019-08-12 11:43:28 177
原创 ArrayList源码分析(jdk11)
初始化方法: private static final int DEFAULT_CAPACITY = 10;//默认初始容量 /** * 用户指定容量为0时返回数组 */ private static final Object[] EMPTY_ELEMENTDATA = {}; /** * 用户调用无参构造函数,...
2019-08-11 21:14:32 508 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人