Java 多线程/并发
文章平均质量分 66
Java 多线程/并发系列文章
0oIronhide
努力看懂spring源码
展开
-
用Future与CountDownLatch实现多线程执行多个异步任务,任务全部完成后返回结果
import java.util.ArrayList;import java.util.List;import java.util.concurrent.*;/** * 用Future与CountDownLatch实现多线程执行多个异步任务,任务全部完成后返回结果 */public class TestFuture { public static void main(String[] args) { TestFuture testFuture = new TestFut原创 2021-10-11 17:45:13 · 1444 阅读 · 0 评论 -
ThreadLocal 与其底层数据结构的介绍
ThreadLocal 是什么通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的ThreadLocal类正是为了解决这样的问题。ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是ThreadLocal变量名的由来。他们可原创 2021-02-18 18:30:14 · 1882 阅读 · 0 评论 -
使用 Java 的 Lock 锁实现办公楼中的电梯载客程序 1.0
使用 Java 的 Lock 锁实现办公楼中的电梯载客程序 1.0该 demo 已在 gitee 上开源,git 链接,欢迎 star !程序的基本介绍与需求:大楼只有一架电梯,楼层可自定义,每层楼 在不同时间点 有数量不定 的乘客需要上下楼。乘客在进入电梯前要选择上楼或下楼,进入电梯后选择楼层。一楼乘客不能下楼,顶楼乘客不能上楼。电梯运行顺序是先向上走,再向下;例如1楼的人去10楼,中途5楼有人要去1楼,先将1楼的人送到10楼,中途不在5楼停顿,之后再送5楼的人去1楼。简单程序的原创 2020-11-19 17:19:17 · 245 阅读 · 3 评论 -
关于 synchronized、ThreadLocal、线程池、Atomic 原子类的 JUC 面试题
文章目录1. 说一说 synchronized 关键字2. 怎么使用 synchronized 关键字3. 说一下 synchronized 关键字的底层原理4. JDK1.6 之后的 synchronized 关键字底层做了哪些优化5. Synchronized 与 Lock 锁的区别6. Synchronized 与 ReentrantLock 的区别7. ThreadLocal 是什么8. 说一下 ThreadLocal 原理9. 为什么 ThreadLocalMap 底层需要数组呢?没有了链表怎么解原创 2020-09-16 11:58:14 · 336 阅读 · 1 评论 -
Java 多线程中用 synchronized 加锁的八锁问题
看以下代码,有一个 phone 对象,A、B 线程分别调用该对象的方法,问两个方法谁先调用?答:先发短信再打电话,因为 synchronized 锁住的是 phone 对象(锁的对象是方法调用者)。public static void main(String[] args) throws InterruptedException { phone phone = new phone(); new Thread(() -> { phone.sendMsg(); .原创 2020-09-14 11:31:53 · 393 阅读 · 10 评论 -
volatile 关键字的三大特点【数据可见性、指令禁止重排性、不保证操作原子性】
volatilevolatile 关键字的两个作用:保证共享数据可见性、保证指令重排;一个问题:不保证多线程操作共享数据的原子性。保证共享数据可见性来看以下代码:public class VolatileDemo { boolean stop = false; public static void main(String[] args) throws Exception { VolatileDemo test = new VolatileDemo();原创 2020-09-12 13:59:07 · 379 阅读 · 0 评论