
并发编程
文章平均质量分 96
陈菜头
这个作者很懒,什么都没留下…
展开
-
ThreadLocal
Threadlocal的概念Threadlocal提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同,Threadlocal提供了一种线程隔离,将变量与线程绑定Threadlocal适用于多线程的情况下,可以实现传递数据,实现线程隔离...原创 2020-07-29 00:23:51 · 174 阅读 · 0 评论 -
FutureTask原理和手写
简单用法实现 Callable 接口,核心是get()方法会调用 LockSupport的park和unpark方法,让线程阻塞,直到拿到响应的结果package com.mayikt;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * @Description: * @Author:原创 2020-07-28 07:36:21 · 146 阅读 · 0 评论 -
线程池源码深度解析
为什么要使用线程池因为频繁的开启线程或者停止,线程需要重新被cpu从就绪状态到调度,效率非常低,所以使用线程池可以实现复用,从而提高效率。线程池的作用1.降低资源消耗:通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗。2.提高响应速度:任务到达时,无需等待线程创建即可立即执行。3.提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致资源调度失衡,降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。4.提供更多更强大的功能:线程原创 2020-07-27 22:53:30 · 349 阅读 · 0 评论 -
Condition、CountDownLatch、Semaphore源码分析
基本概念Condition是一个接口,提供了两个核心方法,await()和signal方法,分别对应着object的wait和notify方法,调用Object对象的这两个方法,需要在同步代码块里面,必须获取到锁才能执行这两个方法,同理,Condition调用这两个方法,也必须先获取到锁等待队列:用于存放lock锁中调用await方法,当前线程会变为阻塞状态,同时会释放锁,单向链表存放同步队列:用于存放没有竞争到锁,采用双向链表存放使用package com.mayikt;import j原创 2020-07-26 20:04:23 · 344 阅读 · 0 评论 -
深入分析AQS实现原理
AQS基本的概念AQS的全称是AbstractQueuedSynchronizer是一个抽象同步队列,它提供了FIFO队列,是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:ReetrantLock、CountDownLatch等AQS是一个抽象类,主要是通过继承的方式来使用,它本身没有实现任何的同步接口,仅仅是定义了同步状态的获取以及释放的方法来提供自定义的同步组件lock与synchronized区别Lock基于AQS封装的锁,结合CAS实现Synchronized是基于C++虚原创 2020-07-26 15:31:24 · 381 阅读 · 0 评论 -
Synchronized关键字深度解析
Synchronized的原理monitorenter每一个对象都会和一个监视器monitor关联,监视器被占用时会被锁住,其他线程无法来获取到该monitor,当JVM执行某个线程的某个方法内部的monitorenter时,它会尝试去获取当前对象的monitor的所有权。过程如下:若monitor的进入数为0,线程可以进入monitor,并将monitor的进入数置为1,当前线程成为monitor的owner若线程已拥有monitor的所有权,允许它重入monitor,则进入monitor的进原创 2020-07-25 14:08:52 · 193 阅读 · 0 评论 -
锁的概述
悲观锁悲观锁比较悲观,当多个线程对共享数据实现修改的时候,谁能拿到锁,谁就能修改成功,最后只有一个线程才能修改成功,原创 2020-07-23 08:20:52 · 145 阅读 · 0 评论 -
volatile关键字深度解析
volatile作用能够保证线程可见性,当一个线程修改共享变量时,能够保证对另一个线程可见性,但是不能够保证共享变量的原子性问题volatile的特性可见性:能够保证线程可见性,当一个线程修改共享变量时,能够保证对另外一个线程可见性。顺序性:程序执行程序按照先后顺序执行,禁止重排序原子性:原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。即在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰代码例子package com.mayikt;/原创 2020-07-20 00:06:22 · 266 阅读 · 0 评论