Java并发
文章平均质量分 70
Codefarmer_uzi
这个作者很懒,什么都没留下…
展开
-
ThreadLocal原理及内存泄漏模拟
ThreadLocal原理ThreadLocal是Java中所提供的线程本地存储机制,可以利⽤该机制将数据缓存在某个线程内部,成为线程内的局部变量该线程可以在任意时刻、任意⽅法中获取缓存的数据这样每个线程都自己管理自己的局部变量,别的线程操作的数据不会产生影响,互不影响一般使用ThreadLocal,官方建议定义为private staticThreadLocal底层是通过ThreadLocalMap来实现的,每个Thread对象(注意不是ThreadLocal对 象)中都存在⼀个ThreadL原创 2021-09-29 18:14:14 · 356 阅读 · 1 评论 -
自定义线程池
自定义线程池前言线程池是由线程 + 队列形成的创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程因此,我们可以根据以上要求,创建出自己的线程池阻塞双端队列利用阻塞队列来存放 暂时 无法处理的 任务public class MyBlockingQueue<T> { private Deque<T> q原创 2021-08-09 13:47:19 · 107 阅读 · 0 评论 -
AQS详解与实现
AQS基本原理AQS:全称 AbstractQueuedSynchronizer位于java.util.concurrent.locks包下,是阻塞式锁和相关的同步器工具的框架用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取 锁和释放锁/** 用 state 属性来表示资源的状态(分独占模式和共享模式) 独占模式是只有一个线程能够访问资源,而共享模式可以允许多个线程访问资源**/private volatile int state;原创 2021-07-18 20:05:44 · 450 阅读 · 0 评论 -
JUC源码之ConcurrentHashMap
JDK7 HashMap并发死链问题HashMap是线程不安全的,在JDK7版本,甚至有可能造成严重后果的并发死链问题产生原因没有对代码进行同步性保护采用头插法形成链表多线程并发执行put()源码分析这里只分析 与问题相关的 扩容相关 源码/** * 源码分析:resize(2 * table.length) * 作用:当容量不足时(容量 > 阈值),则扩容(扩到2倍) */ void resize(int newCapacity) {原创 2021-05-19 16:56:23 · 156 阅读 · 2 评论 -
Java AtomicInteger的实现
Java 原子类的实现前言一、乐观锁与CAS二、实现原子类1.分析源码2.Unsafe类3.封装一个类,获取Unsafe实例4.实现MyAtomicInteger类总结前言juc.atomic 包下面的原子变量使用了乐观锁的一种 CAS 实现方式,了解其原理后,便可以模拟出Java原子类的实现一、乐观锁与CAS乐观锁乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做乐观锁适用于读.原创 2021-04-08 21:59:07 · 182 阅读 · 0 评论