jdk源码阅读
石灰聪
这个作者很懒,什么都没留下…
展开
-
线程池,jdk源码阅读(八)
线程池的使用Java 中提供的线程池 Api为了方便大家对于线程池的使用,在 Executors 里面提供了几个线程池的工厂方法,这样只需要直接使用Executors 的工厂方法,就可以使用线程池:newFixedThreadPool:该方法返回一个固定数量的线程池,线程数不变,当有一个任务提交时,若线程池中空闲,则立即执行,若没有,则会被暂缓在一个任务队列中,等待有空闲的线程去执行。newSingleThreadExecutor: 创建一个线程的线程池,若空闲则执行,若没有空闲线程则暂缓在任务队列原创 2020-08-18 10:55:50 · 106 阅读 · 0 评论 -
ConcurrentHashMap,jdk源码阅读(七)
ConcurrentHashMap简介ConcurrentHashMap直接使用 Node 数组来保存数据,并且采用 Node 数组元素作为锁来实现每一行数据进行加锁来进一步减少并发冲突的概率数,据结构采用了数组+单向链表+红黑树的结构,为什么要引入红黑树呢?在正常情况下,key hash 之后如果能够很均匀的分散在数组中,那么数组中的每个队列的长度主要为 0 或者 1,但是实际情况下,还是会存在一些队列长度过长的情况。如果采用单向列表方式,那么查询某个节点的时间复杂度就变为 O(n); 因此对于队列长度原创 2020-08-14 00:46:46 · 330 阅读 · 1 评论 -
CountDownLatch,jdk源码阅读(六)
CountDownLatchCountDownLatch控制线程的执行顺序CountDownLatch中主要用的方法一个是await(),调用这个方法的线程会被阻塞,另外一个是countDown(),调用这个方法会使计数器减1,当计数器的值为0时,调用await()方法被阻塞的线程会被唤醒,继续执行。CountDownLatch和join的区别在当前线程中,如果调用某个thread的join方法,那么当前线程就会被阻塞,直到thread线程执行完毕,当前线程才能继续执行。join的原理是,不断的检查原创 2020-08-09 15:27:24 · 124 阅读 · 0 评论 -
BlockingDeque,BlockingQueue,jdk源码阅读(五)
BlockingQueue:阻塞队列(单项)BlockingDeque:阻塞队列(双向)阻塞队列使用:使用方法和集合大同小异API:源码分析ArrayBlockingQueue:构造方法public ArrayBlockingQueue(int capacity) { this(capacity, false); }public ArrayBlockingQueue(int capacity, boolean fair) { if (capa原创 2020-08-09 13:37:22 · 172 阅读 · 0 评论 -
Condition,jdk源码阅读(四)
Condition是一个接口,AQS中的ConditionObject内部类实现了此接口。使用方式:生产者,消费者模型public class Producer implements Runnable{ private Queue<String> msg; private int maxSize; private Lock lock; private Condition condition; public Producer(Queue<Stri原创 2020-08-06 15:20:03 · 127 阅读 · 0 评论 -
ThreadLocal,jdk源码阅读(三)
ThreadLocal的使用ThreadLocal其实就是给线程设置了一个线程中的局部变量,用来隔离线程,保证数据安全。public class ThreadLocalDemo { static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>(){ @Override protected Integer initialValue() { retu原创 2020-08-05 00:27:22 · 82 阅读 · 0 评论 -
ReentrantLock,jdk源码阅读(二)
ReentrantLock:重入锁使用:public class ReentrantLockDemo { private static int count = 0; static Lock lock = new ReentrantLock(); public static void inc(){ lock.lock(); try { Thread.sleep(1); count++;原创 2020-07-31 10:52:47 · 99 阅读 · 0 评论 -
搭建JDK源码阅读环境,jdk源码阅读(一)
搭建JDK8源码阅读环境创建一个Java项目(最基础的Java项目就可以),jdk源码在jdk目录中的src.zip中,解压后把解压的目录复制到创建的项目中。创建一个测试用例,打断点调试运行一下。会报如下图中的错误解决第一个问题Information:java: 系统资源不足。Error:java: OutOfMemoryError: insufficient memoryOOM错误,原因内存不足。解决办法加大内存。点击File–>Settings–>Bui原创 2020-07-29 10:58:12 · 460 阅读 · 0 评论