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