JAVA并发编程
Java并发编程
死牛胖子
在技术的路上渐行渐远
展开
-
JAVA并发编程 | 两个线程交替打印两个数组中的元素
有如下两个数组,开启两个线程,分别控制一个数组,每次输出一个字符,两个线程轮流输出。数组一:1234567数组二:ABCDEFG输出结果:1A2B3C4D5E6F7G有锁实现wait / notify多线程编程最基本的方法,通过 wait/notify 方法进行线程间的交互,从而实现线程间轮流输出。public class SynchronizedTest() { public static void main(String[] args) { char[] ai =原创 2021-12-15 04:09:03 · 942 阅读 · 0 评论 -
JUC源码系统之AQS同步器源码解析
AQS 可以认为是一个模板方法,是 JDK 提供的实现 JVM 锁的模板,AQS 封装了同步机制,通过实现 AQS 可以让开发者比较简单就可以实现 JVM 锁,而不用去考虑底层的同步机制。降低了锁的实现难度及实现代价。AQS 同步器提供了两套同步方案:独占式、共享式。也就是说要实现独占锁或者共享锁都可以通过继承 AQS 实现。方法简介独占式共享式方法介绍acquire(int arg)acquireShared(int arg)阻塞式加锁acquireInterrupt原创 2020-12-21 22:01:42 · 534 阅读 · 0 评论 -
JUC源码系列之Semaphore源码解析
目录Semaphore 简介Semaphore 使用示例Semaphore 实现原理Semaphore 源码解析Semaphore 简介Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。使用示例在一个需求,开启 30 个线程并发读取文件,并存储至数据库,但数据库只有 10 个连接,如果 30 个线程同时存库,则会导致无法获取数据库连接,这时必须控制只有 10 个线程同时获取数据库连接进行数据保存。public class M原创 2020-12-19 16:30:59 · 101 阅读 · 1 评论 -
JUC源码系列之CountDownLatch源码解析
目录CountDownLatch 简介CountDownLatch 使用示例CountDownLatch 优缺点CountDownLatch 源码解析扩展CountDownLatch 简介CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,达到线程间通信的效果。CountDownLatch 允许一个或多个线程一直等待,直到其他线程运行完成后再执行。使用示例让多个线程等待public class Test { public static void原创 2020-12-14 22:13:38 · 122 阅读 · 0 评论 -
JUC源码系列之ReentrantLock源码解析
目录ReentrantLock 简介ReentrantLock 使用示例ReentrantLock 与 synchronized 的区别ReentrantLock 实现原理ReentrantLock 源码解析ReentrantLock 简介ReentrantLock 是 JDK 提供的一个可重入的独占锁,独占锁:同一时间只有一个线程可以持有锁可重入:持有锁的线程可重复加锁,意味着第一次成功加锁时,需要记录锁的持有者为当前线程,后续再次加锁时,可以识别当前线程。ReentrantL原创 2020-12-14 20:39:56 · 132 阅读 · 2 评论 -
JUC源码系列之AtomicInteger源码解析
多线程编程最简单的例子就是计数器,如下所示public class Test { private static int i = 0; public static void main(String[] args) { IntStream.range(0, 10000).forEach(v -> new Thread(Test::add).start()); } private static void add() { i++; .原创 2020-11-30 20:15:51 · 134 阅读 · 2 评论 -
并发编程之ThreadLocal源码解析
ThreadLocal是什么ThreadLocal 可以存储一个变量,该变量只有当前线程可以取出,对其它线程不可见,具有线程隔离性,在并发编程中经常会用到。使用场景场景一、存储当前登录用户信息一个请示到达后端系统,系统会根据 session 或者 token 获取当前用户信息,并将该信息存储至 ThreadLocal,在整个请示处理过程中,随时都可以从 ThreadLocal 中取出用户信息,并且不会与其它请求的用户信息混淆。SpringSecurity 就是将用户信息构造成 SecurityC原创 2020-09-11 15:40:19 · 262 阅读 · 0 评论