多线程
文章平均质量分 91
Yanní_G
这个作者很懒,什么都没留下…
展开
-
Java Map详解-从HashMap到concurrentHashMap
1. HashMap源码注释中有这么一句话:In usages with well-distributed user hashCodes, tree bins are rarely used.意思是说只要hash算法做得好,hash冲突少,红黑树基本用不上属性值一览public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializa.原创 2021-02-19 21:55:59 · 998 阅读 · 0 评论 -
Java Queue详解-从普通Queue到ConcurrentQueue
队列类关系总览1. ArrayQueue环形队列public class ArrayQueue<T> extends AbstractList<T> { private int capacity; // 对象数组长度 private T[] queue; // 对象数组 private int head; // 头指针 private int tail; // 尾指针}常用方法代码很简单,不多赘述,一看就能明白。不支持迭代原创 2021-02-19 21:53:45 · 772 阅读 · 0 评论 -
AQS ReentrantLock ReentrantReadWriteLock CountDownLatch源码阅读
1. AQS源码阅读1.1 AQS简介AbstractQueuedSynchronizer 简称AQS,是实现JUC包中各种锁的关键,此类是一个模板类,具体的ReentrantLock、CountDownLatch、ReadWriteLock等等都是自己去实现里边变量的使用规则。各种类型的锁都有自己的锁类型信息比如ReadWriteLock就肯定会有当前的锁状态是读锁模式还是写锁模式static final Node SHARED = new Node(); // 当前锁状态是 共享锁(读锁原创 2021-02-19 21:30:48 · 171 阅读 · 0 评论 -
Java中的强软弱虚四种引用和ThreadLocal
1 强引用1.1 什么是强引用// 情况1static Object o = new Object();// 情况2public void get(){ Object o = new Object();}就是最普通的创建对象方式,当使用new关键字经过创建对象的三个步骤完成之后,对象o此时就有了一个指向堆内存中这个对象的一个引用。1.2 与垃圾回收的关系1.2.1 什么可以作为GC Root由于Java使用的垃圾回收机制是根可达算法,使用为GC Root的对象都有以下几种原创 2021-02-12 21:27:19 · 342 阅读 · 0 评论 -
IO 线程图解 & Netty框架
请看前文 select poll epoll 超详解释1 Selector上文说到了从BIO到多路复用器的演变路程和各个多路复用器的工作流程,还介绍了epoll的边缘触发和水平触发的问题。如下是Java NIO包下的方法调用对应系统调用的详细对比,请看如下Java代码和注释。public class Test { private ServerSocketChannel server = null; private Selector selector = null; int p原创 2021-01-24 20:29:08 · 439 阅读 · 4 评论 -
JVM 内存模型与线程
1 硬件的效率与一致性为了解决CPU与内存的速度差异,引入了高速缓存,如果有多个CPU而且他们又共享同一主存,所以引入了一个新的问题:缓存一致性。为了解决这个问题,需要CPU在访问缓存时都要遵循一定的协议,比如MESI协议(文末有粗略的解释MESI协议,并未深入研究)。2 Java内存模型每条线程有自己的工作内存(类似于cache),工作内存中包括主存中数据的副本,但是不包括线程私有的局部变量和方法参数。如果局部变量是一个reference,他引用的对象在Java堆中被各个线程共享,但是refe原创 2020-12-09 12:17:25 · 191 阅读 · 0 评论 -
JVM 线程安全和轻量级锁、重量级锁、偏向锁及其优化
1. 线程安全的实现方法1.1 互斥同步(悲观锁)synchronized特性重量级,Java线程映射到操作系统内核线程,所以会导致用户态到内核态的切换同一条线程是可重入的monitorenter执行时吧对象的锁计数器加一,monitorexit会把计数器减一,减为0时才真正释放锁无法强制已获取锁的线程释放锁,也无法强制正在等待锁的线程中断或者退出This Monitor 和 Class Monitor根据修饰的方法类型来决定取所在的对象实例this还是取类型对应的Class对象原创 2020-12-08 23:53:44 · 399 阅读 · 0 评论 -
Java线程的定义
1. exec()当进程调用exec()函数时,该进程的执行程序完全替换成新程序,而新程序则从其main()函数开始执行。调用exec()并不创建新进程,前后的进程ID并未改变,只是用磁盘上的新程序替换了当前程序的正文段、数据段和堆栈2. exit()2.1 进程终止的5种正常方式main函数执行return语句,等效于调用exit()调用exit()函数。但是exit()并不处理文件描述符、多进程(父进程和子进程)和作业控制调用_exit或者 _Exit ,目的是为进程提供一种无需运行终止原创 2020-12-05 22:25:28 · 183 阅读 · 0 评论