![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程
文章平均质量分 85
包括多线程基础,多线程理论
全栈黎明
以代码为生
展开
-
分布式集群如何保证线程安全
分布式环境如何保证线程安全?原创 2024-01-30 20:53:10 · 221 阅读 · 0 评论 -
多线程笔记
线程池public static void main(String[] args) throws ExecutionException { //线程池创建线程 ExecutorService es = Executors.newFixedThreadPool(2);// MyThread t1 = new MyThread();// MyThread t2 = new MyThread();// MyThread t3 = n原创 2020-12-22 14:49:13 · 77 阅读 · 0 评论 -
ReentrantLock的公平锁解析
公平锁前置概念park和unpark多线程执行逻辑这里对AQS类做一个介绍公平锁源码分析深入分析公平锁的实现前置概念park和unparkunpark函数为线程提供“许可(permit)”,线程调用park函数则等待“许可”。 Thread thread = Thread.currentThread(); LockSupport.park(); //park()是不可重入的,如果连续调用两次park(),会发生线程阻塞 LockSupport.unpark(thr原创 2020-08-15 11:29:27 · 199 阅读 · 0 评论 -
线程池
线程池创建线程池的方法线程池的作用5个创建方法线程池应用举例高级的创建线程池的方法线程池的代码实践线程池银行举例创建线程池的方法线程池的作用线程复用控制最大并发度管理线程5个创建方法 //看方法有五种线程池 ExecutorService threadPool = Executors.newFixedThreadPool(5);//一池5个处理线程 ExecutorService singleThreadExecutor = Executors.newSi原创 2020-08-09 21:00:30 · 101 阅读 · 0 评论 -
生产者消费者
生产者消费者问题注意点synchronized版阻塞队列版注意点多线程操作资源类,牢记三步走:判断干活唤醒synchronized版//A : num + 1//B : num - 1public class A { public static void main(String[] args) { Data data = new Data(); new Thread(() -> { for (int i = 0原创 2020-08-08 21:54:40 · 79 阅读 · 0 评论 -
synchronized和lock的区别
synchronized和lock的区别1. synchronized是jvm层面的,lock是API层面的锁2. synchronized不需要解锁3. 等待是否可中断4. synchronized是非公平锁5. 锁绑定多个条件Condition(精准唤醒)精准唤醒的Condition代码举例1. synchronized是jvm层面的,lock是API层面的锁使用如下代码验证public class LockAndSynchronizedDemo { public static vo原创 2020-08-08 21:48:39 · 317 阅读 · 1 评论 -
阻塞队列
阻塞队列的使用阻塞队列的简介jdk里面的其中阻塞队列的实现阻塞队列的四组方法ArrayBlockingQueue的代码验证SynchronousQueue的代码验证阻塞队列的简介阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除的附加方法的队列。1)阻塞插入:当队列满后,队列会阻塞(拒绝)插入元素,直到队列不满。2)阻塞移除:当队列为空时,队列会阻塞(拒绝)移除元素,直到队列里有元素。jdk里面的其中阻塞队列的实现ArrayBlockingQueue:由数组结构组成的原创 2020-08-08 21:22:26 · 91 阅读 · 0 评论 -
读写锁
读写锁简介互斥条件代码验证简介本质是提高线程并发的手段,java里面通过ReentrantReadWriteLock实现可以实现对同一个资源类的读写分离互斥条件读 - 读 不互斥读 - 写 互斥写 - 写 互斥代码验证class MyCache{ //资源类 private volatile Map<String,Object> map = new HashMap<>(); //private Lock lock = new Reentra原创 2020-08-06 18:15:40 · 73 阅读 · 0 评论 -
自旋锁
自旋锁自旋锁简介代码实现自旋锁juc中自旋锁源码自旋锁简介是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU代码实现自旋锁public class SpinLock { //原子引用线程 AtomicReference<Thread> atomicReference = new AtomicReference<Thread>(); public static void m原创 2020-08-06 18:05:51 · 71 阅读 · 0 评论 -
CAS
CASCAS你知道吗?CAS是什么?CAS底层原理?如果知道,谈谈你对unsafe的理解CAS缺点原子更新引用知道吗? 如何规避ABA问题?原子引用解决ABA问题CAS你知道吗?CAS是什么?比较并交换CAS底层原理?如果知道,谈谈你对unsafe的理解自旋锁,UNSafecas是一条CPU并发原语,判断内存某个位置的是否为预期值,如果是则更改为新的值这个过程是原子的CAS缺点循环时间长,开销大(如果CAS失败,会一直进行尝试,如果CAS长时间不成功,开销很大)只能保证一个共享变量的原创 2020-08-04 18:37:41 · 128 阅读 · 0 评论