![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
juc
WWYDFL
天赋决定上限,基础决定下限
展开
-
01-022【jvm】CAS与原子类ABA问题
CAS/ABA原创 2020-01-30 14:37:44 · 257 阅读 · 0 评论 -
06-012 【JUC】synchronized和Lock的区别
原始构成:synchronized是关键字属于JVM层面,monitorenter(底层通过monitor对象来完成,其wait/notify等方法也依赖于monitor对象,只有在同步块或方法中才能调用wait/notify等方法)需要monitorexit退出使用方法synchronized不需要用户去手动释放锁,当synchronized代码执行完后系统会自动让线程释放对锁的占用;...原创 2020-01-29 22:49:57 · 146 阅读 · 0 评论 -
06-011 【JUC】死锁编码及定位分析
死锁是什么死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因为争夺有限的资源而陷入死锁。代码举例package com.magic.juc0117;class HoldLockThread implements Runnabl...原创 2020-01-29 22:01:13 · 122 阅读 · 0 评论 -
06-010 【JUC】公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁
1.公平锁和非公平锁是什么?公平锁:是指多个线程按照申请锁的顺序来获取锁,先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比现申请的线程优先获得锁,在高并发的情况下,有可能会造成优先级反战或者饥饿现象两者区别公平锁:就是很公平,在并发环境中,每个线程获取锁时会查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则加入等...原创 2020-01-29 21:48:24 · 217 阅读 · 0 评论 -
06-009 【JUC】读写锁ReadWriteLock接口的实现ReentrantReadWriteLock
独占锁(写锁)/共享锁(读锁)是什么独占:该锁一次只能被一个线程持有,ReentrantLock和synchronized都是独占锁共享:该锁可以被多个线程持有举例:ReentrantReadWriteLock其读锁是共享锁,其写锁是独占锁。读锁的共享锁可保证并发读是非常高效的,读写、写读、写写过程是互斥的代码实现package com.magic.juc0117;impor...原创 2020-01-29 21:47:57 · 99 阅读 · 0 评论 -
06-008 【JUC】CountDownLatch/CyclicBarrier/Semaphore的相关使用举例
1.CountDownLatchpackage com.magic.juc0117;import java.util.concurrent.CountDownLatch;public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { ...原创 2020-01-29 21:47:29 · 167 阅读 · 0 评论 -
06-007【JUC】阻塞队列BlockingQueue与生产者消费者阻塞队列版
1.什么是阻塞队列当阻塞队列为空时,从队列中获取元素的操作将会被阻塞;当阻塞队列是满时,往队列里添加元素的操作将会被阻塞。2.为什么用阻塞队列?有什么好处?在多线程领域,所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒为什么需要BlockingQueue?好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQue...原创 2020-01-29 19:42:47 · 132 阅读 · 0 评论 -
06-006【JUC】java实现多线程的四种方式之四:线程池
1.为什么用线程池及其优势线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后再线程创建后启动这些任务,**如果线程数量超过了最大数量,超出数量的线程排队等候,**等其他线程执行完毕,再从队列中取出任务来执行。主要特点:线程复用;控制最大并发数;管理线程。优势:降低资源消耗。通过重复利用已经创建的线程降低线程创建和销毁造成的损耗。提高响应速度。当任务到达时,任务可以...原创 2020-01-29 18:25:33 · 124 阅读 · 0 评论 -
06-005【JUC】java实现多线程的四种方式之三:实现Callable接口
实现Callable接口package com.magic.juc0117;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * @Description * 与Runnable...原创 2020-01-19 14:39:55 · 469 阅读 · 0 评论 -
06 004【JUC】java多线程之八锁案例
八锁案例个人感觉需要判断是否加锁,加的是否为同一把锁,同一把锁需要等待,不同的锁不用等待。package com.magic.juc0117;import java.util.concurrent.TimeUnit;/** * 1.标准访问,先打印邮件还是短信? * 绝不会同时进去,只要在一个资源类里面,不管他有多少同步方法,只要一个线程先访问了资源类里 * 的任何一个同步方法,...原创 2020-01-19 14:00:29 · 89 阅读 · 0 评论 -
06 003【JUC】多线程的生产者消费者及Condition介绍
生产者消费者举例:现在两个线程,可以操作初始值为零的一个变量,实现一个线程对该变量+1,一个线程对该变量-1,实现交替,来10轮,变量初始值最终为零,下面每句都很干package com.magic.juc0117;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;imp...原创 2020-01-19 13:21:24 · 92 阅读 · 0 评论 -
06 002【JUC】怎样将线程不安全的集合类替换为线程安全的类?主要涉及写时复制(CopyOnWrite)
由ArrayList引发的一系列问题写在前面:务必牢牢记忆java.util.ConcurrentModificationException、CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMapnew ArrayList()底层new了什么?数组底层什么类型?Object 想想list.add 能装什么 啥都能装以Ja...原创 2020-01-19 12:52:50 · 325 阅读 · 0 评论 -
06 001 【JUC】以售票案例演示多线程、lambda表达式、函数式接口(@FunctionalInterface)
三个线程并发(三个售票员 卖出 30张票)大量重复代码可以设置到模板里,参见IDEA.package com.magic.juc0117;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks...原创 2020-01-19 12:18:34 · 176 阅读 · 0 评论