JAVA多线程
文章平均质量分 71
JAVA多线程
EileenChang
This is the way!
展开
-
Disruptor入门
Disruptor简单入门原创 2021-04-26 18:21:23 · 228 阅读 · 3 评论 -
一文读懂Java线程池
文章目录1 线程池前置知识1.1 Callable1.2 Future1.3 FutureTask2 ThreadPoolExecutor2.1 ThreadPoolExecutor继承体系2.2 ThreadPoolExecutor参数2.3 ThreadPoolExecutor任务提交流程2.4 线程工厂2.5 拒绝策略2.6 Executors提供的线程池2.6.1 newCachedThreadPool2.6.2 newFixedThreadPool2.6.3 newSingleThreadExec原创 2021-04-25 17:09:49 · 160 阅读 · 2 评论 -
ThreadLocal和强软弱虚引用
ThreadLocal源码使用场景:声明式事务,保证拿到同一个connection内存泄漏原创 2021-04-24 14:26:44 · 726 阅读 · 0 评论 -
深入理解ReentrantLock
文章目录前言1 可重入锁2 ReentrantLock3 AQS总结前言 保证线程安全的方式有很多,比如CAS操作、synchronized、原子类、volatile保证可见性和ReentrantLock等,这篇文章我们主要探讨ReentrantLock的相关内容。1 可重入锁 所谓可重入锁,即一个线程已经获得了某个锁,当这个线程要再次获取这个锁时,依然可以获取成功,不会发生死锁的情况。synchronized就是一个可重入锁,除此之外,JDK提供的ReentrantLock也是一种可重入锁。原创 2021-04-24 11:34:20 · 215 阅读 · 0 评论 -
多线程实战二
文章目录问题解法一解法二问题 写一个固定容量同步容器,拥有put和get方法,以及getCount方法,能够支持2个生产者线程以及10个消费者线程的阻塞调用。解法一 这是一个典型的生产者消费者问题,可以通过wait()和notifyAll()方法来实现。public class MyContainer4 { private LinkedList<String> list = new LinkedList<>(); private static final原创 2021-04-23 11:21:43 · 119 阅读 · 1 评论 -
多线程实战一
文章目录问题解法一解法二解法三问题 实现一个容器,提供add和size方法。写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束。解法一 使用wait()和notiry()方法实现两个线程之间的通信。public class MyContainer { List<Object> list = new ArrayList<>(); public void add(Object o) {原创 2021-04-23 10:09:28 · 116 阅读 · 0 评论 -
JUC使用案例
文章目录前言ReentranLockCountDownLatchCyclicBarrierPhaserReadWriteLockSemaphoreExchanger总结前言 JUC即java.util.concurrent包,这个包下面提供很多用于保证多线程安全的类,比如atomic包下面的原子类、locks包下面和锁相关的类以及其他类。在这篇文章中,我们将讲解一些常用的类的基本使用。ReentranLockCountDownLatchCyclicBarrierPhaserReadWrite原创 2021-04-23 09:25:33 · 708 阅读 · 2 评论 -
多线程之volatile
文章目录前言1 保证线程可见性2 防止指令重排序2.1 什么是指令重排序2.2 指令重排序可能造成的问题2.3 使用volatile防止指令重排序2.4 volatile防止指令重排序的原理总结前言 volatile在Java中是一个变量修饰符,其作用是保证变量在线程之间的可见性以及防止指令重排序。1 保证线程可见性 关于线程之间的可见性,在之前的文章《并发编程之可见性》中已经详细描述过,所以这里不再赘述。2 防止指令重排序2.1 什么是指令重排序 为了提升指令的执行效率,编译器会对代原创 2021-04-22 16:19:35 · 346 阅读 · 0 评论 -
深入洞察synchronized
详解CAS、synchronized原理及其锁升级过程原创 2021-04-21 21:08:15 · 149 阅读 · 1 评论 -
并发编程之可见性
可见性的基本概念一个小程序public class TestThread { private static boolean flag = true; public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(() -> { while (flag) { } System.out.println("t1 end"); })原创 2021-04-21 14:15:53 · 113 阅读 · 1 评论 -
线程的结束
如何结束一个线程原创 2021-04-21 10:45:30 · 142 阅读 · 0 评论 -
线程之interrupt
interrupt概念 interrupt翻译成中文为“打断”的意思,但实际上,interrupt()方法并非将一个线程打中断的意思。查看Thread.interrupt()方法的源码:public void interrupt() { if (this != Thread.currentThread()) checkAccess(); synchronized (blockerLock) { Interruptible原创 2021-04-20 20:51:51 · 1169 阅读 · 3 评论 -
线程的状态
线程状态之间的切换 线程一共有6种状态。在创建Thread对象,但还未调用start()方法时,线程为NEW状态。调用start()方法后,线程进入RUNNABLE状态。当线程等待synchronized锁时,会进入BLOCKED状态。当线程调用wait()、join()、lock()等方法时,会进入WAITING状态。当线程执行完成之后,并且Thread对象还未被垃圾回收器回收,这时线程状态为TERMINAL。代码 通过以下代码可以体现出线程状态之间的切换。public class Test原创 2021-04-20 19:41:19 · 88 阅读 · 0 评论 -
Java多线程基础知识
进程、线程和程序的概念原创 2021-04-20 16:54:49 · 418 阅读 · 5 评论