多线程与高并发
文章平均质量分 70
it00zyq
IT菜鸟
展开
-
详解Java线程池
一、线程池线程池的8个参数corePoolSize: 核心线程数,默认不会被回收。maximum原创 2021-06-01 11:29:53 · 266 阅读 · 1 评论 -
两个线程交替打印数字和字母,输出1A2B3C4D...
文章目录一、问题描述二、3种解决方法2.1、synchronized与wait/notify2.2、LockSupport与park/unpark2.3、ReentrantLock与await/singal一、问题描述实现一个程序,两个线程交替打印数字和字母,输出1A2B3C4D…,必须先打印数字。正确输出结果:1A2B3C4D5E6F7G8H二、3种解决方法2.1、synchronized与wait/notifyimport java.util.concurrent.atomic.Atomi原创 2021-05-31 21:57:53 · 1125 阅读 · 0 评论 -
Java同步机制
文章目录一、CountDownLatch二、一、CountDownLatchCountDownLatch是基于AbstractQueuedSynchronizer(AQS,抽象队列同步器)实现的。CountDownLatch的使用import java.util.concurrent.CountDownLatch;import java.util.concurrent.atomic.AtomicInteger;/** * 定义一个变量result,初始化为0 * 创建100个线程,每个原创 2021-05-24 19:38:32 · 178 阅读 · 3 评论 -
详解ReentrantLock
文章目录一、ReentrantLock的底层实现二、ReentrantLock的基本用法三、ReentrantLock的特点3.1、ReentrantLock是可重入锁3.2、ReentrantLock的公平属性一、ReentrantLock的底层实现我们先看看ReentrantLock类中lock()方法的实现/*** Performs lock. Try immediate barge, backing up to normal* acquire on failure.*/final v原创 2021-05-24 16:31:06 · 279 阅读 · 2 评论 -
Java中常用的原子类
文章目录一、什么是原子类二、原子类的底层实现三、常用的原子类3.1、AtomicInteger与AtomicLong3.2、LongAdder四、原子类的性能测试4.1、测试程序4.2、测试结果4.3、结果分析4.4、底层实现分析一、什么是原子类Java中提供了一些原子类,原子类包装了一个变量,并且提供了一系列对变量进行原子性操作的方法。我们在多线程环境下对这些原子类进行操作时,不需要加锁,大大简化了并发编程的开发。二、原子类的底层实现目前Java中提供的原子类大部分底层使用了CAS锁(Compar原创 2021-05-24 16:22:26 · 7322 阅读 · 2 评论 -
生产者消费者问题
一、问题描述写一个固定容量的同步容器,拥有put、set两个方法,能够支持2个生产者线程和10个消费者线程的阻塞调用。二、实现方案之synchronizedimport java.util.LinkedList;import java.util.List;/** * @author IT00ZYQ * @date 2021/5/23 23:16 **/public class Q02_Synchronized<T> { private final int MAX_SIZ原创 2021-05-24 12:30:03 · 102 阅读 · 0 评论 -
详解volatile关键字
文章目录一、volatile关键字的两大作用1.1、保证线程间可见性1.2、防止指令重排1.2.1、什么是指令重排?1.2.2、volatile是如何实现防止指令重排的?1.2.3、JVM规范中的8大happen-before原则二、证明volatile可保证线程间可见性的程序三、证明指令重排序存在的程序一、volatile关键字的两大作用1.1、保证线程间可见性JAVA进程中的所有线程是共享堆内存的,线程也有自己的内存,当其中一个线程修改了共享变量时,另一个线程的值可能没有及时更新,volatile原创 2021-05-22 22:59:04 · 641 阅读 · 0 评论 -
Java对象监视器Monitor
文章目录一、ObjectMonitor结构体二、Monitor原理一、ObjectMonitor结构体Monitor是基于C++代码中的ObjectMonitor结构体实现的。ObjectMonitor() { _header = NULL; _count = 0; // 由于synchronized是可重入锁,count用于记录当前对象锁拥有者线程获取锁的次数 _waiters = 0, _recursions = 0;原创 2021-05-22 16:14:21 · 3224 阅读 · 0 评论 -
详解synchronized关键字
文章目录一、synchronized的基本知识二、synchronized的使用2.1、修饰普通方法2.2、修饰静态方法2.3、修饰代码块三、synchronized的锁升级3.1、无锁3.2、偏向锁3.3、轻量级锁 - 自旋锁CAS3.4、重量级锁四、synchronized的使用注意事项一、synchronized的基本知识首先要明白,synchronized关键字锁的是对象,而不是代码块,每个对象的对象头中的markword中有两个二进制位用于标记对象的锁状态,每个对象还有一个监视器Monitor原创 2021-05-22 17:05:01 · 238 阅读 · 1 评论
分享