摘要:
目录: 类图 submit方法(RunnableFuture接口newTaskFor方法) FutureTask类 声明。 核心属性:任务运行状态、核心属性。 构造器。 核心方法。 类图 上节课我们说到了execute方法,此方法虽然可以将任务让如线程池中运行,但却不能返回线程执行的结果,所以针对于 阅读全文
摘要:
目录: execute() addWorker() execute() 1 public void execute(Runnable command) { 2 if (command == null) 3 throw new NullPointerException(); 4 /* 5 * 处理过程 阅读全文
摘要:
目录: 位运算复习 线程池状态解析 位运算复习 原码:一个整数的绝对值转换成二进制,若此数为整数最高位为0,为负数最高位为1。 反码:除最高位的整数标记外,其它数均由0变1,1变0。 补码:反码+1。 注:计算机中不管正数还是负数都用二进制的补码表示,正数的原码、反码、补码都一样。 ———————— 阅读全文
摘要:
目录: corePoolSize:核心线程数量 workQueue:阻塞队列 maximumPoolSize:最大线程数量 threadFactory:线程工厂 handler:拒绝、饱和策略 线程池执行原理图 1 public ThreadPoolExecutor(int corePoolSize 阅读全文
摘要:
目录: ThreadPoolExecutor架构及类结构 工作线程Worker源码解析 总结 ThreadPoolExecutor架构及类结构 从上图来说ThreadPoolExecutor的锁同步是通过AQS来实现的。 注意:想要读懂ThreadPoolExecutor源码你先了解一下知识点: A 阅读全文
摘要:
目录: CAS操作步骤 CAS极端情况下可能会导致的问题:ABA ABA问题的影响 JUC是如何解决ABA问题的 CAS操作步骤 CAS:compare and swap,即比较后再交换。它是一种无锁的算法,操作如下: 从内存获取V的值。 拿到旧的预期值A。 拿到要修改的值B。 当且仅当预期值A和内 阅读全文
摘要:
目录: 原子操作是什么、什么是AtomicInteger JUC提供的原子类 AtomicInteger的使用 AtomicInteger源码简述 原子操作是什么、什么是AtomicInteger 原子操作,是一种不会被线程调度机制所打断的操作,这种操作一旦开始,就会一直运行到结束,中间不会有任何上 阅读全文
摘要:
目录: 什么是Unsafe、为什么要有Unsafe Unsafe源码简述 什么是Unsafe、为什么要有Unsafe 我们知道Java和C、C++这种语言最大的差别就是Java不能直接操作内存,而C、C++可以;但其实在某些场景下我们为了进一步提升效率我们不得不直接操作内存。 而Unsafe就提供了 阅读全文
摘要:
目录: 属性及内部类 构造函数 核心方法 属性及内部类 1、属性: 其实说到属性最终要的也无法就是一个hash数组桶,其它核心的属性都是大同小异。 1 transient volatile Node<K,V>[] table; 2、Node:ConcurrentHashMap存储数据的基本单元。 1 阅读全文
摘要:
目录: 什么是ConcurrentHashMap 为什么要有ConcurrentHashMap ConcurrentHashMap源码解析 什么是ConcurrentHashMap ConcurrentHashMap,从名字上就可以看出它是一个处理并发情况的哈希表,和HashMap非常像,你可以把它 阅读全文