Java多线程
文章平均质量分 86
喵的波波鱼
爱生活,也爱技术!
展开
-
Java多线程(24)——JUC——tools系列(4)——Exchanger
1.原创 2019-10-03 07:58:53 · 171 阅读 · 0 评论 -
Java多线程(21)——JUC——tools系列(1)——CountDownLatch——待完成
1.概述CountDownLatch有两种典型用法: 1.让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒 将 CountDownLatch 的计数器初始化为n :new CountDownLatch(n),每当一个任务线程执行完毕,就将计数器减1 CountDownLatch主要有两个方法, 当一个或多个线程调用await方法时,调用线程会被阻塞 其他线程调...原创 2019-10-03 07:57:48 · 221 阅读 · 0 评论 -
Java多线程(26)——JUC——线程池excutors系列(1)——线程池概述、自己实现一个线程池、jdk中实现的线程池的架构
目录1.线程池概述1.1 线程池产生的背景1.2什么是线程池?1.3使用线程池的好处1.4线程池的主要特点2.自己实现一个线程池2.1 实现线程池的通用规则2.2 实现代码3.线程池的架构1.线程池概述1.1 线程池产生的背景当我们去创建每个线程的时候,都需要为它去分配内存,如虚拟机栈,程序计数器,本地方法栈等,所以创建的过程时间消耗是比较...原创 2019-10-03 08:00:05 · 485 阅读 · 0 评论 -
Java多线程(16)——JUC——locks系列(3)——AQS
目录0.locks包简介1.AQS简介1.1 AQS是什么1.2AQS框架实现的一些点1.3 AQS的层次结构2.AQS原理及源码详解2.1状态(1)state实现独占锁的图解(2)state实现可重入锁的图解2.2节点Node2.3同步队列2.4 加锁函数acquire(1)tryAcquire(int)(2)addWaiter(N...原创 2019-09-27 20:10:18 · 622 阅读 · 0 评论 -
Java多线程——LongAdder(jdk1.8新增)源码分析
目录1.类的定义以及重要字段解析1.1 成员变量cells1.2 成员变量cellsBusy1.3 成员变量base2.方法详解2.1 add方法详解2.2longAccumulate方法详解3.hash的生成详解4.总结1.类的定义以及重要字段解析上面的LongAdder的定义结构看该类实现了Striped64抽象类。Striped64类...原创 2019-09-27 15:27:46 · 243 阅读 · 0 评论 -
Java多线程(20)——悲观锁和乐观锁、公平锁和非公平锁、可重入锁、自旋锁、读锁(共享锁)和写锁(独占锁)
目录1.悲观锁和乐观锁1.1 什么是悲观锁和乐观锁?(1)悲观锁(2)乐观锁1.2 两种锁的使用场景1.3 乐观锁的两种实现方式(1)版本号机制(2)CAS1.4 乐观锁的优缺点(1)优点(2)缺点2.公平锁和非公平锁2.1 是什么?2.2 两者区别3.可重入锁(递归锁)3.1 是什么?3.2 代码演示理解3.3 自己手写一个...原创 2019-09-27 12:45:44 · 1418 阅读 · 0 评论 -
Java多线程(6)——synchronized——synchronized的实现原理(2)
1.锁的四种状态无锁、 偏向锁、 轻量级锁、 重量级锁 锁降级2.锁优化技术1.自旋锁与自适应自旋锁 2.锁消除 3.锁粗化原创 2019-09-27 07:37:00 · 152 阅读 · 0 评论 -
Java多线程(5)——synchronized——synchronized的实现原理(1)
目录1.实现synchronized的基础1.1 HotSpot虚拟机对象在内存中的布局(1)对象头(2)实例数据(3)对齐填充1.2 Monitor2.synchronized在字节码层面的语义实现3.锁的内存语义3.1 synchronized与可见性3.2synchronized与原子性3.3synchronized与有序性1.实现sync...原创 2019-09-27 07:36:31 · 332 阅读 · 0 评论 -
Java多线程(4)——synchronized——线程安全、synchronized的基本使用
目录1.线程安全2.synchronized的基本使用2.1 同步代码块2.2 同步方法1.线程安全什么叫线程安全?如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样 的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 用模拟卖票案例引入线程安全问题:代码:public class TicketR...原创 2019-09-27 07:29:48 · 358 阅读 · 0 评论 -
Java多线程(23)——JUC——tools系列(3)——Semaphore
1.概述信号量主要用于两个目的:一个用于多个共享资源的互斥使用 当有多个共享资源(如停车位只有3个),多个线程(6辆车)都要进行抢夺,同一时间,只有3个线程能抢到锁,其他线程阻塞等待,当有线程执行完释放锁,阻塞等待的线程再次抢夺锁 另一个用于并发线程数的控制2.使用案例使用案例:import java.util.concurrent.Semaphore;...原创 2019-10-03 07:58:37 · 208 阅读 · 0 评论 -
Java多线程(22)——JUC——tools系列(2)——CyclicBarrier——待完成
1.概述CyclicBarrier的字面意思是可循环(Cyclic)使用的屏障(Barrier),它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await()方法2.使用案例案例1:集齐7颗龙珠,就能召唤神龙import ja...原创 2019-10-03 07:58:22 · 190 阅读 · 0 评论 -
Java多线程(12)——ThreadLocalRandom源码剖析
目录1.为什么JUC下要新增ThreadLocalRandom?2.ThreadLocalRandom2.1 ThreadLocalRandom使用示例2.2 ThreadLocalRandom的源码分析1.为什么JUC下要新增ThreadLocalRandom?在jdk1.7之前,java.util.Random是使用比较广泛的随机数生成工具类,我们先来看个Random的...原创 2019-10-08 19:44:36 · 639 阅读 · 0 评论 -
Java多线程(13)——Thread类的源码剖析
待更新补充1.Thread与RunnableThread类中继承了接口Runnable的同时组合了Runnbale 所以我们可以将一个Thread的子类的任务交给另一个Thread去执行package Thread;public class ThreadDemo { public static void main(String[] args) { ...原创 2019-10-07 10:37:42 · 358 阅读 · 0 评论 -
Java多线程(11)——ThreadLocal源码剖析
目录1.概述2.图解+源码分析ThreadLocal原理2.1 Thread类的两个ThreadLocalMap类型的参数2.2 ThreadLocalMap详解(1)成员变量与内部类(2)构造方法(3)获取前一个/后一个索引的方法和设置扩容阈值的方法(4)getEntry方法(5)ThreadLocal的内存泄露(6)set(7)remove2.3...原创 2019-10-07 19:10:57 · 710 阅读 · 0 评论 -
Java多线程(14)——JUC——locks系列(1)——LockSupport使用以及源码分析
目录1.概述2.LockSupport的park-unpark与Object的wait-notitfy的对比3.LockSupport的源码分析3.1 成员变量3.2 park方法3.3 unpark方法1.概述当我要分析AQS,Condition的时候,发现它们当中都使用到了LockSupport,所以先在这里对LockSupport进行学习 LockSuppo...原创 2019-10-06 21:22:15 · 454 阅读 · 0 评论 -
Java多线程(9)——Unsafe(1)——Unsafe类的源码分析
目录1.概述2.源码分析2.1 Class相关2.2 Object相关2.3 数组相关2.4 并发相关(1)CAS相关(2)线程调度相关(3)volatile相关读写(4)内存屏障相关2.5 直接内存访问(非堆内存)2.6 系统相关3.带英文原注释的源码文章前半部分暂时大多数从此链接粘贴过来,仅学习使用,但在后续学习过程中再对每一部分再做详细...原创 2019-10-06 20:36:28 · 493 阅读 · 1 评论 -
Java多线程(28)——JUC——线程池excutors系列(3)——ThreadPoolExcutor(2)——从源码去剖析线程池的原理
1.线程池的运行状态2.execute和submit方法有什么区别?1.execute是Executor制定的规范,submit是ExecutorService制定的规范 2.execute只有接收Runnable参数的一种实现,submit重载的方法,既有接收Runnable参数的实现,也有接收Callable参数的实现 3.execute()...原创 2019-10-03 22:40:24 · 293 阅读 · 0 评论 -
Java多线程(27)——JUC——线程池excutors系列(2)——ThreadPoolExcutor(1)——创建线程池的底层原理
目录1.概述2.Excutors创建线程池的6种方式2.1 Excutors.newFixedThreadPool(int)(1)使用案例(2)源码及特点2.2Excutors.newSingleThreadExecutor(int)(1)使用案例(2)源码及特点2.3Excutors.newCachedThreadPool(int)(1)使用案例(...原创 2019-10-03 15:58:54 · 1067 阅读 · 0 评论 -
Java多线程(25)——JUC——tools系列(5)——Phaser——国庆完成
1.原创 2019-10-03 07:59:11 · 140 阅读 · 0 评论 -
Java多线程(8)——CAS原理及其问题和解决
目录1.CAS1.1 CAS是什么1.2 CAS底层原理(1)Unsafe类(2)自旋锁1.3 CAS的缺点2.ABA问题3.解决ABA问题——原子引用(1)原子引用(2)时间戳原子引用(3)ABA问题的解决4.CAS与Synchronized的使用场景5.拓展:处理器底层如何实现原子操作6.优化 CAS 乐观锁——LongAdder...原创 2019-08-13 12:40:00 · 668 阅读 · 0 评论 -
Java多线程(3)——JMM、volatile
目录1.JMM1.1 可见性1.2 原子性1.3 有序性2.volatile2.1 volatile是什么2.2 三大特性(1)保证可见性(2)不保证原子性(3)禁止指令重排序2.3 总结1.JMMJMM(Java Memory Model):Java内存模型 JMM本身是 一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义...原创 2019-08-12 20:30:38 · 402 阅读 · 0 评论 -
Java多线程(7)——线程的状态转换、线程间的通信——等待唤醒机制
目录1.线程的状态转换2.线程间的通信——等待唤醒机制2.1 线程间的通信概念2.2 等待唤醒机制(1)什么是等待唤醒机制(2)等待与唤醒机制涉及的三个方法 1)等待:wait 2)唤醒:notify和notifyAll(3)锁池(EntryList)和等待池(WaitSet) 1)锁池(EntryList...原创 2019-08-13 17:48:33 · 659 阅读 · 0 评论 -
Java多线程(2)——ThreadAPI详细介绍
目录1.Thread的构造方法2.start方法3.setDaemon4.获取线程的名称、id、优先级(1)获取线程的名称(2)获取id(3)获取线程优先级5.join6.Interrupt6.1 interrupt()和isInterrupted6.2 interrupted()6.3 如何采用优雅的方式结束线程?(1)方式1:通过开关的方式即...原创 2019-08-11 08:21:03 · 2924 阅读 · 8 评论 -
Java多线程——Java多线程设计模式(8)——Active Object模式——待完成
Active Object模式原创 2019-08-17 19:01:09 · 152 阅读 · 0 评论 -
Java多线程——Java多线程设计模式(7)——Two Phase Termination模式、Worker Thread模式——待完成
1.Two Phase Termination模式2.Worker Thread模式原创 2019-08-17 18:59:35 · 112 阅读 · 0 评论 -
Java多线程——Java多线程设计模式(6)——Count Down模式、Thread-Per-Message模式——待完成
1.Count Down模式2.Thread-Per-Message模式原创 2019-08-17 18:56:37 · 147 阅读 · 0 评论 -
Java多线程——Java多线程设计模式(5)——生产者与消费者模式——待完成
生产者与消费者模式原创 2019-08-17 18:49:31 · 192 阅读 · 0 评论 -
Java多线程——Java多线程设计模式(4)——ThreadLocal、Thread-Specific Storage模式
1.ThreadLocal2.Thread-Specific Storage模式原创 2019-08-17 18:44:31 · 181 阅读 · 0 评论 -
Java多线程——Java多线程设计模式(2)——Immutable设计模式——待完成
1.不可变对象模式(Immutable)(1)描述不可变对象一定是线程安全的,可变对象不一定是线程安全的 servlet不是线程安全的,所有的请求对应的都是一个servlet实例,所以写servlet不能有一些全局的变量 strusts 1.x Action不是线程安全的, strusts 2.x Action是线程安全的, JDK官方对定义一个不可变对象描述...原创 2019-08-17 18:44:07 · 121 阅读 · 0 评论 -
Java多线程——Java多线程设计模式(3)——Guarded Suspension模式、Balking模式——待完成
1.Guarded Suspension模式2.Balking模式原创 2019-08-17 18:44:21 · 227 阅读 · 0 评论 -
Java多线程——Java多线程设计模式(1)——Single Threaded Excution模式、ReadWriteLock模式
1.单线程执行模式(Single Threaded Excution)案例/** * 共享资源 */public class Gate { //门记录的通过门的人的数量 private int counter = 0; // private String name = "Nobody"; private String address = "...原创 2019-08-17 18:43:44 · 220 阅读 · 0 评论 -
Java多线程(1)——基本概念、创建的线程的方法
目录1.并发与并行2.进程与线程3.线程的调度(1)分时调度(2)抢占式调度4.主线程5.创建线程的方法(1)Thread类(2)创建线程第一种方式:继承Thread类(3)多线程的内存图(4)创建线程的第二种方式:实现Runnable接口(5)创建线程的两种方式的对比(6)策略模式在Runable接口与Thread类中的应用(7)实现Run...原创 2019-05-25 12:02:44 · 364 阅读 · 0 评论