![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 87
并发编程
gaog2zh
全栈攻城狮 网络安全
展开
-
0202源码详解-ConcurrentHashMap-线程安全集合类-并发编程(Java)
0202源码详解-ConcurrentHashMap-线程安全集合类-并发编程(Java)原创 2023-02-06 12:29:37 · 216 阅读 · 0 评论 -
0201源码详解-ConcurrentHashMap-线程安全集合类-并发编程(Java)
0201源码详解-ConcurrentHashMap-线程安全集合类-并发编程(Java)原创 2023-02-04 09:34:19 · 494 阅读 · 0 评论 -
01Hashmap并发问题-ConcurrentHashMap-线程安全集合类-并发编程(Java)
01Hashmap并发问题-ConcurrentHashMap-线程安全集合类-并发编程(Java)原创 2023-01-10 12:27:48 · 493 阅读 · 0 评论 -
详解-StampedLock原理-并发编程(Java)
详解-StampedLock原理-并发编程(Java)原创 2023-01-04 10:27:56 · 490 阅读 · 0 评论 -
04特性源码分析-ReentrantReadWriteLock原理-AQS-并发编程(Java)
04特性源码分析-ReentrantReadWriteLock原理-AQS-并发编程(Java)原创 2022-12-17 10:08:41 · 495 阅读 · 0 评论 -
03解锁源码分析-ReentrantReadWriteLock原理-AQS-并发编程(Java)
03解锁源码分析-ReentrantReadWriteLock原理-AQS-并发编程(Java)原创 2022-12-16 10:12:43 · 346 阅读 · 0 评论 -
02加锁源码分析-ReentrantReadWriteLock原理-AQS-并发编程(Java)
02加锁源码分析-ReentrantReadWriteLock原理-AQS-并发编程(Java)原创 2022-12-15 08:46:03 · 234 阅读 · 0 评论 -
01入门及简单应用-ReentrantReadWriteLock原理-AQS-并发编程(Java)
01入门及简单应用-ReentrantReadWriteLock原理-AQS-并发编程(Java)原创 2022-12-12 10:48:30 · 509 阅读 · 0 评论 -
03弱引用内存泄露和hash冲突-ThreadLocal详解-并发编程(Java)
03弱引用内存泄露和hash冲突-ThreadLocal详解-并发编程(Java)原创 2022-12-11 11:23:14 · 402 阅读 · 0 评论 -
02源码分析-ThreadLocal详解-并发编程(Java)
02源码分析-ThreadLocal详解-并发编程(Java)原创 2022-12-10 09:02:57 · 359 阅读 · 0 评论 -
01入门-ThreadLocal详解-并发编程(Java)
01入门-ThreadLocal详解-并发编程(Java)原创 2022-12-08 08:27:26 · 361 阅读 · 0 评论 -
相关性质和条件变量-ReentrantLock详解(2)-AQS-并发编程(Java)
相关性质和条件变量-ReentrantLock详解(2)-AQS-并发编程(Java)原创 2022-11-27 09:56:18 · 505 阅读 · 0 评论 -
加锁和解锁-ReentrantLock详解-AQS-并发编程(Java)
加锁和解锁-ReentrantLock详解(1)-并发编程(Java)原创 2022-11-25 11:12:28 · 520 阅读 · 0 评论 -
FutureTask-详解(二)-ThreadPollExecutor-并发编程(Java)
FutureTask-详解(二)-ThreadPollExecutor-并发编程(Java)原创 2022-11-19 11:01:12 · 412 阅读 · 0 评论 -
详解(一)-ThreadPollExecutor-并发编程(Java)
详解(一)-ThreadPollExecutor-并发编程(Java)原创 2022-11-13 11:41:33 · 436 阅读 · 0 评论 -
生产者消费者模式进阶-设计模式-并发编程(Java)
生产者消费者模式进阶-设计模式-并发编程(Java)原创 2022-10-28 11:13:43 · 410 阅读 · 0 评论 -
初级模拟-synchronized应用场景-并发编程(Java)
初级模拟-synchronized应用场景-并发编程(Java)原创 2022-10-15 11:54:12 · 491 阅读 · 0 评论 -
Imutalbe Object不可变模式-设计模式-并发编程(Java)
Imutalbe-Object不可变模式-设计模式-并发编程(Java)原创 2022-10-13 11:33:33 · 358 阅读 · 0 评论 -
两阶段终止模式-设计模式-并发编程(Java)
两阶段终止模式-设计模式-并发编程(Java)原创 2022-10-06 11:51:56 · 556 阅读 · 0 评论 -
ScheduledThreadPoolExecutor-并发编程(Java)
1、Timer在认为调度线程池功能加入之前,可以使用java.util.Timer来实现定时功能。优点:简单易用缺点:由于所以认为都由同一个线程调度,因此所有任务都是串行执行前一个认为的延迟或者异常将会影响到之后的任务延迟示例:import lombok.extern.slf4j.Slf4j;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.TimeUnit;@S原创 2021-12-16 10:25:00 · 583 阅读 · 0 评论 -
详解-ThreadPollExecutor-并发编程(Java)
文章目录1、池状态2、构造方法3、三种常用线程池3.1、固定大小线程池:FixedThreadPool3.2、带缓冲的线程池:CachedThreadPool3.3、单线程线程池:SingleThreadPool4、常用方法4.1、submit(Runnable thread):接收Runnable接口的线程4.2、invokeAny:接收任一线程返回结果;invokeAll,接收所有线程放回的结果。4.3、停止1、池状态[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K7原创 2021-12-04 10:57:35 · 566 阅读 · 0 评论 -
自定义线程池-并发编程(Java)
线程池简单结构图:下面我来实现自定义线程池,有4个部分拒绝策略:当线程池线程全部运行,且阻塞队列满时,改使用那种策略/** * 拒绝策略 * @param <T> 泛型-任务 */@FunctionalInterfacepublic interface RejectStrategy<T> { void reject(BlockingQueue<T> queue, T task);}阻塞队列:当线程池线程全部运行,需要把任务放入阻原创 2021-10-03 19:03:21 · 129 阅读 · 0 评论 -
不可变类及享元模式-并发编程(Java)
1、不可变类的的使用有如下代码import lombok.extern.slf4j.Slf4j;import java.text.ParseException;import java.text.SimpleDateFormat;@Slf4j(topic = "c.DateFormatMutable")public class DateFormatMutable { public static void main(String[] args) { SimpleDateF原创 2021-10-01 12:03:41 · 188 阅读 · 0 评论 -
原子累加器及其原理-JUC-并发编程(Java)
1、原子整数累加和原子累加器性能比较import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicLong;import java.util.concurrent.atomic.LongAdder;import java.util.function.Consumer;import java.util.function.Supplier;public class Test01原创 2021-09-30 08:53:08 · 682 阅读 · 0 评论 -
原子整数、引用、数组、更新器-JUC-并发编程(Java)
文章目录一、原子整数二、原子引用1、AtomicReference-原子引用类型2、AtomicStampedReference-原子引用类型(版本标记)3、AtomicMarkableReference-原子引用类型(布尔型标记)三、原子数组四、原子更新器一、原子整数JUC并发包提供了:AtomicBooleanAtomicIntegerAtomicLong下面以AtomicInteger为例,来了解下常用API,所有的操作都是原子的。自增:incrementAndGet():自增原创 2021-09-27 12:04:52 · 372 阅读 · 0 评论 -
CAS入门-乐观锁-并发编程(Java)
1、保护共享资源模拟银行账户取款操作,设置一个账户接口以及一个非线程的账户类实现。代码如下:/** * 账户接口 */public interface Account { // 获取余额 Integer getBalance(); // 取款 void withdraw(Integer amount); // 模拟多个线程取款操作 static void multiWithdraw(Account account) { List<原创 2021-09-25 17:59:11 · 142 阅读 · 0 评论 -
单例模式及线程安全问题分析-设计模式-并发编程(Java)
文章目录0、序言1、饿汉式2、枚举类3、懒汉式4、懒汉式改进5、静态内部类0、序言单例模式有很多实现方法,饿汉式、懒汉式、静态内部类、枚举类。饿汉式:类加载时,创建该单例对象懒汉式:首次使用时,创建该该单例对象静态内部类:首次使用时,有静态内部类创建该实例对象枚举类:类加载时创建下面我们来分析下每种在获取单例对象时的线程安全问题及相关其他问题。1、饿汉式典型代码实现:// 问题1:为什么加final// 问题2:如果实现了序列化接口,怎么防止反序列化时单例被破坏public fi原创 2021-09-24 11:02:13 · 128 阅读 · 0 评论 -
valitile原理简介及读写可见性-并发编程(Java)
volatile的底层原理就是内存屏障,Memory Barrier(Fense)对volatile变量的写指令后加入写屏障对volatile变量的读指令之前加入写屏障1、volatile保证可见性写屏障保证在该屏障之前的,对共享变量的改动,同步到主存中而读屏障保证在该屏障之后,对共享变量的读取,加载的是主存中最新的数据2、volatile保证有序性写屏障会确保指令重排时,不会将 写屏障之前的代码排在写屏障之后读屏障会确保指令重排时,不会将写屏障之后的代码排在读屏障之前vo.原创 2021-09-23 11:14:30 · 217 阅读 · 0 评论 -
JMM之可见性入门-并发编程(Java)
文章目录1、Java内存模型简介2、可见性3、解决3.1、volatile3.2、synchronized4、可见性与原子性5、两阶段终止6、犹豫模式1、Java内存模型简介JMM即Java Memory Model ,它定义了主存、工作内存等抽象概念,底层对应着CUP寄存器、缓存、硬件内存、CUP指令优化等。JMM体现在以下几个方面:原子性:保证指令不会受到线程上下文切换的影响可见性:保证指令不会受到缓存的影响有序性:保证指令不会受到CUP指令优化的影响2、可见性可见性问题-退不出原创 2021-09-19 11:32:47 · 160 阅读 · 0 评论 -
API及性质-ReentrantLock入门-并发编程(Java)
文章目录1、可重入2、可打断3、锁超时4、锁超时解决哲学家进餐问题5、公平锁与不公平锁6、条件变量1、可重入可重入是指同一线程如果首次获得了这把锁,那么因为是这把锁的拥有者,因此有权利再次获取这边锁。/** * 测试ReentrantLock可重入性 */@Slf4j(topic = "c.TestReentrant")public class TestReentrant { static ReentrantLock lock = new ReentrantLock(); p原创 2021-09-08 11:34:51 · 203 阅读 · 0 评论 -
park-unpark_线程状态转换_多锁问题-并发编程(Java)
文章目录一、park-unpark1、基本使用2、park-unpark执行顺序3、与wait-notify比较3、原理二、线程状态转换1、NEW --> RUNNABLE2、RUNNABLE <--> WAITING3、RUNNABLE <--> WAITING4、RUNNABLE <--> WAITING5、RUNNABLE < -- > TIMED_WAITNG6、RUNNABLE < -- > TIMED_WAITNG7、RUNNAB原创 2021-09-06 20:05:14 · 481 阅读 · 0 评论 -
生产者消费者模式-设计模式-并发编程(Java)
1、保护性暂停解耦图中Futures就好比居民楼的信箱(每个信箱都有房间编号),左侧t0,t2,t4就好比等待邮件的居民,右侧的t1,t3,t5就好比邮递员。如果需要在多个类之间使用GuardedObject对象,作为参数传递不是很方便,因此设计一个用来解耦的中间类,这样不仅能够解耦结果等待者和结果生产者,还能够同时支持多个任务的管理。场景:邮递员送信,居民收信,信箱里面有很多格子,每个格子对应居民房间,编号。邮递员根据信件的房间编号,把信件投入相应的信箱小格子;居民根据自己的房间编号去对应的小格子中原创 2021-09-04 11:40:08 · 130 阅读 · 0 评论 -
保护性暂停-设计模式-并发编程(Java)
文章目录一、保护性暂停二、join原理一、保护性暂停同步模式之保护性暂停,即Guarded Suspension,用在一个线程等待另外一个线程的执行结果。有一个结果需要从一个线程传递到另外一个线程,让两个线程关联同一个GuardedObject。如果有结果不断从一个线程传递到另外一个线程,可以使用消息队列。JDK中,join的实现、Future的实现,采用的就是此模式。因为要等待另一方的结果,归类到同步模式。场景:线程2下载某个url网页内容,线程1需要等待线程2下载的内容/** *原创 2021-09-03 20:43:57 · 267 阅读 · 0 评论 -
wait_notify-并发编程(Java)
文章目录1、wait/notify 原理2、API3、wait(long n) 和 sleep(long n)区别4、唤醒不同条件下等待的多线程1、wait/notify 原理owner线程发现条件不满足,调用wait方法,即可进入WaitSet变为WATING状态。BLOCKED和WATING状态的线程都处于阻塞状态,不占用CPU时间片。BLOCKED状态线程,会在Owner线程释放锁时唤醒。WATING状态的线程会在Owner线程调用notify或者notifyAll时唤醒,但唤醒后并不会原创 2021-09-03 17:36:12 · 116 阅读 · 2 评论 -
偏向锁-多线程安全-并发编程(Java)
1、偏向锁引入轻量级锁在没有竞争时(就自己这个线程),每次重入仍然需要执行cas操作。Java 6引入偏向锁进一步优化:只有第一次使用CAS将线程ID设置到对象的Mark Word头,之后发现这个线程ID是自己的就表示没有竞争,不用重新CAS。以后只有不发生竞争,这个对象就归改线程所有。2、偏向状态64位Java对象头Mark Word结构: Mark Word(64 bits) State unused:25原创 2021-08-28 11:23:43 · 249 阅读 · 0 评论 -
轻量级锁和重量级锁-多线程安全-并发编程(Java)
文章目录1、轻量级锁1.1、加锁1.2、解锁2、重量级锁2.1、加锁和解锁2.2、自旋优化1、轻量级锁1.1、加锁使用场景:如果一个对象虽然有多个线程访问,但是多线程访问时间是错开的,即多线程之间不会发生竞争。轻量级锁对使用者是透明的,即语法仍然是synchronized如下代码,2个同步方法,利用同一个对象加锁:static final Object obj = new Object();public static void method1() { synchronized(obj)原创 2021-08-26 20:45:35 · 187 阅读 · 0 评论 -
sychronized工作原理和Java对象结构-多线程安全-并发编程(Java)
1、Java对象头Java对象构成:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding),图示:对象头:以32位虚拟机为例,Java对象头构成如下普通对象: Object Header(64 bits) Mark Word(32 bits) Klass Word(32 bits) 数组对象: Object Head原创 2021-08-23 20:57:17 · 121 阅读 · 0 评论 -
线程安全分析及小案例-多线程安全-并发编程(Java)
1、变量的线程安全分析1.1、成员变量和静态变量如果它们没有共享,则线程安全如果它们被共享了,根据状态是否改变区分如果只是读操作,则线程安全如果有读写操作,则这段代码是临界区,需要考虑线程安全问题1.2、局部变量局部变量是线程安全的局部变量引用的对象如果改对象(生命周期)处在方法的作用范围之内,线程安全如果该对象逃离了方法的作用访问,需要考虑线程安全问题2、常见线程安全类StringIntegerStringBufferRandomVectorHash原创 2021-08-18 21:01:32 · 187 阅读 · 0 评论 -
sychronized(1)-多线程安全-并发编程(Java)
1、应用之互斥为了避免临界区竞态条件的发生,有多种手段可以达到目的阻塞式:synchronized,Locksynchronized:Java关键字Lock(锁)为接口,有多个实现类非阻塞式:非原子变量这里我们使用阻塞式的解决方案:synchronized,来解决多线程安全问题,既常说的锁对象。它使用互斥的方式保证同一时刻最多只有一个线程能持有对象锁,其他线程想要获取这个对象锁时会阻塞住。这样能保证拥有锁的线程可以安全的执行临界区内的代码,不用担心上下文切换。2、synchroniz原创 2021-08-17 21:29:50 · 89 阅读 · 0 评论 -
入门-多线程安全-并发编程(Java)
文章目录1、上下文切换2、名称解析下面我们以2个线程对同一个类中同一静态变量做简单自增和自减为例,初步了解线程安全问题。一个线程对初始值为0的静态变量做自增5000次,另外一个线程对同一静态变量做自减5000次,结果会是我们预想的0吗?public class ThreadSecurity01 { static int n = 0; public static void main(String[] args) throws InterruptedException {原创 2021-08-13 21:07:41 · 124 阅读 · 0 评论