
Java并发包
文章平均质量分 95
Java多线程相关内容,比较着重原理。
JunSIr_#
软件工程大三在读,工作语言Java/Go
展开
-
Java多线程与并发编程(1)_基础
Java基础-线程(进程、创建、方法、synchronized并发)-详细学习笔记线程与进程进程:计算机中特定功能的程序在数据集上的一次运行,如迅雷线程:线程是进程的一个单元,如使用迅雷下载任务多线程:一个进程中有多个线程在同时运行,如迅雷下载,迅雷软件的一次运行就是一个进程,那么在迅雷中可以同时下载多个电影,这就是多线程(每一个下载都是一个线程)Jvm是多线程的,在我们运行jvm的时候...原创 2019-12-18 21:19:57 · 1495 阅读 · 1 评论 -
Java多线程与并发编程(2)_Synchronized
硬核学习Synchronized原理(底层结构、锁优化过程)Monitor 被翻译为监视器或管程,是操作系统层次的数据结构每个 Java 对象都可以关联一个 Monitor 对象如果使用 synchronized 给对象上锁(重量级)之后,该对象头的Mark Word 中就被设置指向 Monitor 对象的指针Monitor 结构如下现模拟多线程竞争Synchronized锁对象的流程刚开始 Monitor 中 Owner 为 null当 Thread-2 执行 synchroniz原创 2020-05-29 15:39:41 · 11240 阅读 · 5 评论 -
Java多线程与并发编程(3)_volatile
Java线程进阶-解决 volatile关键字要讲Volatile关键字,我们需要从内存模型开说起在 JDK1.2 之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存...原创 2020-03-23 10:58:59 · 993 阅读 · 0 评论 -
Java多线程与并发编程(4)_CAS与原子类
Java多线程共享模型之乐观锁(CAS与Atomic原子类)注:【问题提出】的乐观锁方案看不懂没关系,这正是本文要讨论的内容文章目录Java多线程共享模型之乐观锁(CAS与Atomic原子类)问题提出CAS分析为什么无锁(CAS)效率高CAS特点JUC_Atomic原子类ABA问题ABA解决方案-AtomicStampedReference原子数组AtomicIntegerArray字段更新器AtomicIntegerFieldUpdater(了解)原子类常见操作(了解)问题提出有个账户,有两个原创 2020-06-19 16:06:14 · 402 阅读 · 0 评论 -
Java多线程与并发编程(5)_线程不安全与逃逸分析
Java变量共享引发的惨案,不得已走进的悲观锁相关:精湛细腻版-Java多线程与并发编程硬核学习Synchronized原理(底层结构、锁优化过程)不加锁带来的问题主要是共享变量带来的问题:两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?package c2;public class TestJoin { static int count = 0 ; //共享变量 public static void main(Strin原创 2020-06-04 04:35:33 · 731 阅读 · 0 评论 -
Java多线程与并发编程(6)_AQS锁同步器
使用Java的AQS组件自定义一把锁AQSAQS全称是 AbstractQueuedSynchronizer,也称“同步器”,是阻塞式锁和相关的同步器工具的框架AQS有如下特点:用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetState - 通过cas 机制设置 state 状态独占模式是只有一个线程能够访问资原创 2020-06-20 19:34:49 · 258 阅读 · 0 评论 -
Java多线程与并发编程(6)_基于AQS的ReentrantLock 原理
基于AQS的ReentrantLock 原理(多图多源码预警)在上一篇博客中,我使用AQS实现了一把自定义锁,这样可以使我们更好的理解基于AQS的锁体系使用Java的AQS组件自定义一把锁也可以更好得理解本文中的一些关键词非公平锁实现原理加锁解锁流程先从构造器开始看,默认为非公平锁实现 public ReentrantLock() { sync = new NonfairSync(); }NonfairSync 继承自 AQS(同步器),它长这个样子原创 2020-06-21 04:10:06 · 2304 阅读 · 2 评论 -
Java多线程与并发编程(7)_自定义线程池
手把手教你写出一个Java线程池线程池架构一个线程池,应包含阻塞队列,用来存放任务包含存放线程的集合,其中的线程用来直接执行任务,或拉取缓存队列中的任务注意,下方代码基本基于本架构图编写自定义拒绝策略使用函数式接口,将拒绝权限下方,由调用者决定添加任务失败时线程池的回绝方式死等带超时等待让调用者放弃任务执行让调用者抛出异常让调用者自己执行任务//步骤一:自定义拒绝策略接口@FunctionalInterface //函数式接口interface RejectPol原创 2020-06-20 01:50:55 · 444 阅读 · 0 评论 -
Java多线程与并发编程(8)_ThreadPoolExecutor
Java线程池之ThreadPoolExecutor文章目录Java线程池之ThreadPoolExecutorExecutor体系结构线程池状态构造方法线程池工作方式创建各种线程池提交任务给线程池关闭线程池其他线程池任务调度线程池异常处理ThreadPoolExecutor是我们使用Java线程池的核心,它所处的体系如下:Executor体系结构线程池状态ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量从数字上比较线程池的终结程原创 2020-06-20 15:42:21 · 2647 阅读 · 0 评论 -
N 段代码掌握Java N 种多线程开发姿势
N 段代码掌握Java N 种多线程开发姿势文章目录N 段代码掌握Java N 种多线程开发姿势synchronized相关valiate 相关AtomXXX类相关面试题1 观察者基于 AQS 的CountDownLatchReentrantLock相关面试题 2 生产者与消费者ThreadLocal相关面试题 3 火车票并发容器相关【待补充】线程池相关Future CallableCachedPoolSingleThreadExecutorSchedulePoolsynchronized相关锁对对原创 2021-05-16 03:01:22 · 626 阅读 · 0 评论 -
Java多线程设计模式之顺序控制-两个小案例
Java多线程设计模式之顺序控制-两个小案例案例一两个线程,保证B线程执行完毕后再让A线程执行思路一:使用wait/notify,需要synchronized关键字支持思路二:使用LockSuport的park/unpark,推荐使用参考代码:package com.Thread;import sun.security.ssl.SSLContextImpl;import java.util.concurrent.locks.LockSupport;public class SynCo原创 2020-06-19 14:06:24 · 461 阅读 · 0 评论 -
Java多线程活跃性问题-死锁问题
Java-你不得不掌握的一段代码-线程死锁模拟与剖析基本概述何为死锁?多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止图示线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态代码模拟public class TestDeadLock { pr...原创 2020-03-20 18:15:42 · 736 阅读 · 0 评论 -
Java基础-多线程间通信(生产者与消费者问题)
Java基础-多线程间通信(生产者与消费者问题)生产者生成水果,如果水果没有被买走那么就不生产处于阻塞状态,如果水果被消费者买走就的时候消费者会通知生产者告诉他我们已经把水果买走了请生产,消费者同理,如果水果已经生产出来那么就买走,买走之后再通知生产者水果已经没了请生产。注意:1.线程间的通信共享数据一定要有同步代码块synchronized2.一定要有wait和notify,而且二者一...原创 2019-12-18 21:46:23 · 711 阅读 · 0 评论 -
学Java多线程必知的Java内存模型JMM
可见性原理之JMM内存模型JVM与JMM不要把JVM内存模型与JMM内存模型搞混淆了我们常说的JVM内存模式指的是JVM的内存分区,而Java内存模式是一种虚拟机规范,是由JVM来具体实现的Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以原创 2020-05-29 17:50:34 · 381 阅读 · 0 评论 -
Java如何优雅得终止线程?使用两阶段终止模式
Java如何优雅得终止线程?使用两阶段终止模式在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个"料理后事""的机会,即让T2完成善后工作后终止错误思路使用stop()stop方法会直接杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁,其它线程将永远无法获取锁使用 System.exit(int) 方法停止线程目的仅是停止一个线程,但这种做法会让整个程序都停止两阶段终止模式流程图:方法之利用 isInterrupt原创 2020-05-29 02:22:23 · 339 阅读 · 0 评论