源码分析
文章平均质量分 95
问道玄霄
初见惊艳,再见依然
展开
-
线程与线程池
线程与线程池线程线程状态四种创建方式协程(非重点)线程池特点线程池架构说明创建线程池Executors.newFixedThreadPool(int)Executors.newSingleThreadPool()Executors.newCachedThreadPool()new ThreadPoolExecutor()线程池 7 大参数线程运行原理线程池拒绝策略单一的、固定的、可变的三种创建线程池的方法,用哪个多?线程线程是CPU调度的基本单位,线程模型分为KLT、ULT模型,JVM使用的KLT,Ja原创 2021-06-09 01:21:17 · 671 阅读 · 1 评论 -
理解HashMap与ConcurrentHashMap
HashMap数据结构源码原理分析HashMap属性HashMap内部类Nodeput()HashMap的负载因子为什么0.75HashMap与HashTable的区别JDK1.7与1.8中,HashMap的区别JDK1.7扩容死锁分析单线程扩容多线程扩容Jdk8-扩容ConcurrentHashMap数据结构JDK1.7并发安全控制重要成员变量put(key,value)get(key)数据结构数组+链表+(红黑树jdk>=8)源码原理分析HashMap属性 //初始容量为16;原创 2021-06-09 00:13:31 · 985 阅读 · 3 评论 -
深入理解ArrayList与CopyOnWriteList源码
ArrayList与CopyOnWriteListArrayList属性构造方法get()add(E e)问题解决ArrayList线程不安全的方法Collections.synchronizedList(new ArrayList<>())CopyOnWriteList数据结构get(int index)add(E e)HashSetHashSet构造方法add(E e)解决方法CopyOnWriteArraySet构造方法add(E e)contains(Object o)ArrayLis原创 2021-06-08 00:13:32 · 1022 阅读 · 5 评论 -
深入理解Automatic、CAS、Unsafe类
Automatic与Unsafe类Automatic类i++在并发场景下存在的问题三级目录Automatic类原子操作:不可被中断的一个或一系列操作i++在并发场景下存在的问题实例代码:class MyData{ int number=0; public void addPlusPlus(){ number++; } private static void atomicDemo() { System.out.println("原子性测试");原创 2021-06-08 00:13:04 · 1691 阅读 · 4 评论 -
基于Semaphore理解部分AQS源码
Semaphore、CountDownLatch、CyclicBarrierSemaphore代码示例构造方法重要方法Semaphore.acquire()tryAcquireShared(arg)doAcquireSharedInterruptibly()addWaiter(Thread)node.predecessor()shouldParkAfterFailedAcquire(p,node)parkAndCheckInterrupt()Semaphore.release()tryReleaseShar原创 2021-06-07 01:51:28 · 286 阅读 · 1 评论 -
基于ArrayBlockingQueue理解AQS部分源码
ArrayBlockingQueue阻塞队列队列类型阻塞队列的好处阻塞队列分类阻塞队列API生产者消费者ArrayBlockingQueue源码1. new ArrayBlockingQueue()2. put(Object obj)2.1 enqueue(e)2.1.1 notEmpty.signal()2.1.2 doSignal(Node first)2.1.3 transferForSignal(Node node)2.1.4 enq(node)2.2 notFull.await()2.2.1原创 2021-06-06 02:33:34 · 369 阅读 · 0 评论 -
基于ReentrantLock深入理解AQS源码(二)
深入理解AQS示例代码1.new ReentrantLock()2.ReentrantLock.lock()2.1 compareAndSetState(0, 1)3. acquire()4. tryAcquire(arg)5. addWaiter(Thread)5.1 enq(Node node)5.1.1compareAndSetHead6. acquireQueued(Node node, arg)6.1 Node.predecessor()6.2 shouldParkAfterFailedAcqu原创 2021-06-05 23:58:29 · 683 阅读 · 0 评论 -
基于ReentrantLock深入理解AQS数据结构
AQSLockSupport、Synchronized、ConditionLockSupport阻塞方法park唤醒方法unparkLockSupport解决的问题AQSAQS具备特性AQS数据结构同步等待队列条件等待队列AQS数据结构源码ReentrantLock开始解读AQSLockSupport、Synchronized、Conditionjava中3种让线程等待唤醒的方法:使用Object的wait()让线程等待,使用Object中的notify方法唤醒线程;使用JUC中COndit原创 2021-06-05 23:58:03 · 527 阅读 · 1 评论 -
JVM类加载机制-源码分析-打破双亲委派-Tomcat类加载
目录类加载机制类加载器和双亲委派机制类加载器的初始化过程扩展类加载器的创建扩展类加载器继承关系:应用类加载器的创建双亲委派机制双亲委派机制源码加载递归调用图设计双亲委派的目的自定义类加载器打破双亲委派机制Tomcat打破双亲委派机制模拟实现Tomcat的webappClassLoader加载自己war包应用内不同版本类实现相互共存与隔离类加载机制当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到 JVM;package com.jvm.jvm1;public原创 2021-05-04 16:31:23 · 241 阅读 · 1 评论