![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
文章平均质量分 82
xylitolz
Ta很懒,还没有添加简介
展开
-
基于AQS的并发工具类
文章目录1. ReentrantLock2. Semaphore2.1 基本使用2.2 应用2.3 源码分析3. CountDownLatch3.1 基本使用3.2 应用4. ReentrantReadWriteLock5. CyclicBarrier5.1 基本使用5.2 应用场景5.3 CyclicBarrier 与 CountDownLatch 对比Reference 本篇文章已同步更新至Github仓库JavaSummary,欢迎star! 1. ReentrantLock state初始化原创 2021-08-30 11:11:03 · 201 阅读 · 0 评论 -
ConcurrentHashMap源码分析
文章目录JDK7 ConcurrentHashMap底层结构重要属性和内部类构造方法put()rehash()get()size()JDK8 ConcurrentHashMap底层结构重要属性和内部类重要方法get():无锁put()initTable() : table初始化addCount() : table 计数与扩容table扩容transfer():把table中的节点移动到nextTable中size()总结Reference ConcurrentHashMap是J.U.C(java.util原创 2021-04-17 22:32:45 · 917 阅读 · 5 评论 -
happens-before
happens-before是可见性与有序性的一套规则总结,规定了对共享变量的写操作对其他线程的读操作可见 抛开以下happens-before规则,JMM并不能保证一个线程对共享变量的写,对其它线程对该共享变量的读可见 线程解锁 m 之前对变量的写,对于接下来对 m 加锁的其它线程对该变量的读可见 static int x; static Object m = new Object(); new Thread(()->{ synchronized(m) { x = 1..原创 2021-04-01 20:19:08 · 114 阅读 · 0 评论 -
synchronized原理
文章目录重量级锁Monitor加锁/解锁轻量级锁使用场景加锁流程解锁流程锁膨胀场景锁膨胀过程自旋优化场景自旋重试成功的情况自旋重试失败的情况备注偏向锁场景偏向状态撤销 - 调用对象 hashCode撤销 - 其它线程使用对象撤销 - 调用 wait/notify批量重偏向批量撤销锁消除Reference 重量级锁 Monitor 每个Java对象都可以关联一个Monitor对象,使用synchronized给对象上锁(重量级)之后,该对象头的Mark Word中就被设置指向Monitor对象的指针 Mo原创 2021-04-01 10:57:41 · 106 阅读 · 0 评论 -
Java并发编程:Java线程(二)
文章目录往期同步与异步需要等待结果1. join实现(同步)2. Future实现(同步)3. 自定义实现-保护性暂停(同步)4. CompletableFuture实现(异步)5. BlockingQueue实现(异步)不需要等待结果Reference 往期 1.Java并发编程:Java线程(一) 同步与异步 以调用方角度来讲,如果 需要等待结果返回,才能继续运行就是同步 不需要等待结果返回,就能继续运行就是异步 需要等待结果 这时既可以使用同步处理,也可以使用异步来处理 1. join实现(同.原创 2020-12-08 20:57:41 · 108 阅读 · 0 评论 -
Java并发编程:Java线程(一)
创建和运行线程 方法一:直接使用Thread // 创建线程对象 Thread t = new Thread("name") { public void run() { // 要执行的任务 } }; // 启动线程 t.start(); // Java 8 以后可以使用lambda精简代码 Thread t = new Thread(()->{ // 要执行的代码 }); 方法二:使用Runnable配合Thread 把【线程】与【任务】(要执行的代原创 2020-11-15 21:53:50 · 203 阅读 · 0 评论 -
Java并发编程:进程与线程
进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存;在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程 进程可以视为程序的一个实例;大部分程序可以同时运行多个实例进程(eg:记事本、浏览器等),也有的程序只能启动一个实例进程(eg:网易云音乐) 线程 一个进程之内可以分为一到多个线程 一个线程就是一个指令流,将指令流中的一条条指令以一定原创 2020-11-15 20:14:08 · 85 阅读 · 0 评论