
Java并发编程
Hepburn Yang
匠心精神
-
原创 【Java并发】 -- fork/join 框架解读
场景需求方案用法原理2019-11-13 17:28:491169
1
-
原创 【Java并发】--读写锁 ReentrantReadWriteLock
关于锁,我们了解最多的基本都是排它锁,也就是这些锁在同一时刻只允许一个线程进行访问,而读锁在同一时刻可以允许多个线程访问,但写锁访问时候,所有的线程和其他写线程都会被阻塞。读写锁维护了一对锁,一个读锁,一个写锁;2019-06-30 22:43:35237
2
-
原创 【java并发】 --wait与notify原理
重量级锁通过对象内部的监视器(monitor)实现,其中monitor的本质是依赖于底层操作系统的Mutex Lock实现,操作系统实现线程之间的切换需要从用户态到内核态的切换,切换成本非常高。前面我们在讲Java对象头的时候,讲到了monitor这个对象,在hotspot虚拟机中,通过ObjectMonitor类来实现monitor。他的锁的获取过程的体现会简单很多.wait 和notif...2019-09-04 17:28:403059
3
-
原创 【Java并发】-- Lock和Synchronized的选择
2019-08-10 08:13:22169
0
-
原创 【Java并发】-- Condition机制原理分析
Condition之前用synchronized的时候,使用wait/notify可以实现线程间的通信。除此之外,JUC包里提供了类似的线程通信机制,Condition 是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒;Condition基本使用ConditionWaitpublic class ConditionDem...2019-07-23 00:01:11626
0
-
原创 【并发工具】- countdownlatch、CyclicBarrier、Semaphore
这三个类用于同步一批线程的行为,分别是CountDownLatch、Semaphore和CyclicBarrier。2019-07-11 11:14:09262
0
-
原创 【Java并发】-- ConcurrentHashMap如何实现高效地线程安全(jdk1.8)
1.传统集合框架并发编程中Map存在的问题?2.早期改进策略HashTableHashTable相比HashMap是线程安全的,因为HashTable所有的方法都是加了synchronized的,锁的是整个hashMap,也就是我们说的锁的粒度比较大,由于最基本的put,set操作都加了互斥锁,造成的结果就是同一时间点只能由一个线程put或只能get,并发操作时所有的put,get操作都...2019-07-21 20:39:312112
1
-
原创 【Java并发】-- synchronized原理 (偏向锁,轻量级锁,重量级锁膨胀过程)
放大了看,会让你惊艳的一张图。什么是Monitor?可以理解为一个同步工具,也可以描述为一个同步机制。所以java对象天生是一个Monitor, 每个Object对象里面markOop --> monitor() 里可以保存ObjectMonitor对象。2019-07-17 17:28:45492
1
-
原创 【Java并发】-- ReentrantLock 可重入锁实现原理2 - 释放锁
接着上一篇分析……给一扇传送门,【Java并发】-- ReentrantLock 可重入锁实现原理1 - 获取锁当ThreadA线程执行完任务后调用finally中的unlock()方法释放锁的时候会经历什么样的操作。ReentrantLock.unlock()1. ReentrantLock中的unlock() /* * 释放锁 */ public void unlock(...2019-07-17 16:54:33580
1
-
原创 【Java并发】-- ReentrantLock 可重入锁实现原理1 - 获取锁
Lock有很多具体的锁的实现,但最直观的实现是ReentrantLock重入锁,也是平时我们用的最多的。重入锁是独占锁的代表。ReentrantLock 重入锁表示可重入的锁,举个例子:当线程t1通过调用lock()方法获取锁之后,再次调用lock,是不会再阻塞获取锁的,直接增加重试次数就行了。synchronized 和 ReentrantLock 都是可重入锁;来个简单的demo来说明一...2019-07-17 11:54:06563
2
-
原创 【Java并发】-- Lock体系
在 Lock 接口出现之前, Java 中的应用程序对于多线程的并发安全处理只能基于synchronized 关键字来解决。但是 synchronized 在有些场景中会存在一些短板,也就是它并不适合于所有的并发场景。 但是在 Java5 以后, Lock 的出现可以解决synchronized 在某些场景中的短板,它比 synchronized 更加灵活。Lock 的实现Lock 本质上是...2019-07-14 21:50:45143
0
-
原创 【Java并发】-- 并发基础
多线程发展历史一个指令在一个cpu上运行,用户输入一个指令,cpu处理完毕之后返回结果。批处理操作,将多个指令集中写入到磁带上,一次交给CPU处理,返回结果。批处理操作不能解决串行化等待的问题,如果一个线程(读写磁盘)指令执行时间比较长,后面的指令需要一直等待,CPU资源也处于阻塞态得不到充分利用。多线程技术通过线程切换可以实现多个线程同时执行,从而在一定程度上提升性能和cpu的利用率...2019-07-14 21:29:09111
0
-
原创 【Java并发】-- AQS 原理
在 Lock 中,用到了一个同步队列 AQS,全称 AbstractQueuedSynchronizer,它是一个同步工具, 也是 Lock 用来实现线程同步的核心组件, 如果你搞懂了 AQS,那么 J.U.C 中绝大部分的工具都能轻松掌握;2019-07-07 21:40:54468
0
-
原创 【Java并发】-- 原子类+并发工具
2019-07-16 08:17:21109
0
-
原创 【Java并发】-- 线程池
文章目录1.为什么要使用线程池?2.Executors提供的四种线程池区别以及应用场景:3.线程池有哪几种工作队列?ArrayBlockingQueue - 有界的数组队列 :LinkedBlockingQueue - 可支持有界/无界的队列 :DelayedWorkQueue优先级队列。PriorityBlockingQueue : 优先队列SynchronousQueue : 队列长度为1...2019-07-16 08:16:45147
1
-
原创 【Java并发】-- 并发容器
2019-07-14 21:51:57119
0
-
原创 【Java并发】-- 并发关键字(synchronized / volatile / final)
2019-07-14 21:48:32227
0