![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
1.1.2_多线程
nmgyangguangyuan
这个作者很懒,什么都没留下…
展开
-
死锁编码及定位分析
文章目录死锁编码及定位分析是什么产生原因解决 死锁编码及定位分析 是什么 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉,他们都将无法进行下去,如果系统资源充足,进行的资源请求都能够得到满足,死锁出现的可能性就很低,否则就回因争夺有限的资源而陷入死锁. package top.ygy.thread; public class DeadLockDe...原创 2019-06-25 15:55:04 · 118 阅读 · 0 评论 -
volatile分析
volatile分析 解决问题 问题:多线程编程,共享变量需要多个线程可见,需要保证线程的执行顺序 解决: 禁止编译器优化而重排序指令。 对 volatile 修饰的变量值,保证线程读取到的值是最新的,而不是寄存器中缓存的值。 优势劣势 优势 轻量级锁 劣势 不保证原子性 适用场景 适用条件 对变量的写操作不依赖于当前值。 该变量没有包含在具有其他变量的不变式中。 实例 开销较...原创 2019-06-15 14:48:51 · 131 阅读 · 0 评论 -
CAS
CAS分析 解决问题 多线程自增计算,count++,出现丢失值问题,可用synchronized加锁解决,但是影响性能较大,使用原子类,可提高性能, 原子类的底层原理就是CAS package top.ygy.thread; import java.util.concurrent.atomic.AtomicInteger; /** * @Description: TODO(原子类解决自增...原创 2019-06-15 20:59:13 · 149 阅读 · 0 评论 -
ABA问题分析与解决
ABA问题分析 产生原因 CAS会导致ABA问题 CAS算法实现一个重要的前提是需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差类会导致数据的变化. 比如说一个线程one从内存位置V中取出A,线程Two也执行,将A–>B–>A,这时one进行CAS操作发现内存仍是A,然后one操作成功. one操作成功,但是在这个过程中线程two可能操作了其它数据,产生问题. pac...原创 2019-06-16 17:10:05 · 6958 阅读 · 0 评论 -
集合不安全问题
ArrayList 问题 线程不安全,报错:java.util.ConcurrentModificationException package top.ygy.thread; import java.util.ArrayList; import java.util.List; import java.util.UUID; /** * @Description: TODO(集合类不安全问题) ...原创 2019-06-18 14:43:29 · 235 阅读 · 0 评论 -
java锁分析
Java不可重入锁和可重入锁理解 公平锁与非公平锁 概念 公平锁 多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到. 非公平锁 多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,有可能出现优先级反转或饥饿的现象 公平锁:ReentrantLock设置为true为公平锁 非公平锁:ReentrantLock默认非公平锁,synchron...原创 2019-06-19 10:04:28 · 108 阅读 · 0 评论 -
CountDownLatch与CyclicBarrier与Semaphore比较并分析
CountDownLatch 概念 一种线程的辅助,允许一个操作等待直到某个或某组操作执行完成 倒数,计数为0时执行 代码 demo1 package top.ygy.thread; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; /** * @Description: TOD...原创 2019-06-20 09:13:20 · 130 阅读 · 0 评论 -
synchronized与Lock比较
synchronized与Lock区别 原始构成 synchronized是关键字属于JVM层面 monitorenter(底层通过monitor对象来完成,起始wait/notify等方法也依赖于monitor对象,只有在同步块和方法中才能调用wait/notify等方法) monitorexit Lock是具体类(java.util.concurrent.locks.lock)是a...原创 2019-06-21 16:06:02 · 200 阅读 · 0 评论 -
阻塞队列分析
文章目录阻塞队列分析解决问题优势劣势适用场景组成部分阻塞队列类型核心方法底层原理相似对比非阻塞队列实现生产者-消费者模式(Object)非阻塞队列实现生产者-消费者模式(Lock)阻塞队列实现的生产者-消费者模式(BlockingQueue) 阻塞队列分析 解决问题 问题 在concurrent包发布之前,程序员需要自己去控制线程的阻塞和唤醒,同时兼顾效率和线程安全,这给程序带来了不小的复杂度...原创 2019-06-21 17:08:47 · 283 阅读 · 0 评论 -
Callable和FutureTask分析
文章目录Callable和FutureTask分析解决问题优势劣势应用场景组成部分FutureTask使用底层原理相似对比 Callable和FutureTask分析 解决问题 问题 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口,这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通...原创 2019-06-24 15:17:58 · 276 阅读 · 0 评论 -
线程池分析
文章目录线程池分析解决问题优势劣势适用场景组成部分线程池使用技术架构编码实现ThreadPoolExecutor拒绝策略问题解决类型自定义线程池问题解决代码最优参数底层原理七个参数原理 线程池分析 解决问题 问题 为每个请求创建一个新线程的开销很大 活动的线程也消耗系统资源 解决 线程池为线程生命周期开销问题和资源不足问题提供了解决方案,线程池做的工作主要是控制运行的线程的数量,处...原创 2019-06-25 14:49:43 · 118 阅读 · 0 评论 -
互联网并发编程
1. 并发编程 1.1并发编程学习目的 1.2线程安全 1.7 volatile关键字 2. 线程通信 2.1线程之间通信 2.2 使用wait和notify模拟queue 2.3ThreadLocal 2.3单例&多线程 3.1 同步类容器 3.2 并发类容器 4.1ConcurrentMap 4.2Copy-On-Write容器 6.1多线程设计模式 6.2Future模式 6...原创 2018-04-24 18:49:32 · 188 阅读 · 0 评论