![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
Java.util.concurrent
黑面|书生
这个作者很懒,什么都没留下…
展开
-
JUC之死锁
@[TOC] (死锁编码及定位分析)1 概念死锁是指两个或多个以上的进程在执行过程中,因争夺资源而造成一种互相等待的现象,若无外力干涉那他们都将无法推进下去。如果资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。2 产生死锁的原因系统资源不足进程运行推进的顺序不对资源分配不当死锁产生的四个必要条件:互斥解决方法:把互斥的共享资源封装成可同时访问占有且等待解决方法:进程请求资源时,要求它不占有任何其它资源,也就是它必须一次原创 2020-12-28 17:49:58 · 253 阅读 · 0 评论 -
JUC之线程池
JUC之线程池1 前言1.1 Callable接口1.2 注意2.ThreadPoolExecutor2.1 为什么用线程池2.2 线程池的好处2.3 架构说明2.4 线程池的创建2.4.1 Executors.newFixedThreadPool(int count)2.4.2 Executors.newSingleThreadExecutor()2.4.3 Executors.newCacheThreadPool()2.4.4 Executors.newScheduledThreadPool(int原创 2020-12-28 16:26:53 · 194 阅读 · 3 评论 -
JUC之Synchronized和Lock的区别
JUC之Synchronized和Lock的区别1 synchronized属于JVM层面,属于java的关键字2 使用方法3 等待是否中断4 加锁是否公平5 锁绑定多个条件Condition6 实战1 synchronized属于JVM层面,属于java的关键字monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象 只能在同步块或者方法中才能调用 wait/ notify等方法)Lock是具体类(java.util.concurre原创 2020-12-26 15:29:43 · 284 阅读 · 1 评论 -
JUC之阻塞队列
JUC之阻塞队列1 阻塞队列1.1 简单介绍1.2 BlockingQueue核心方法1.2.1 BlockingQueue核心方法抛出异常组布尔类型组阻塞队列组超时组1.3 SynchronousQueue1.4 阻塞队列的用处1.4.1 生产者消费者模式1.4.1 生产者消费者模式进阶版1 阻塞队列1.1 简单介绍队列: 队列就可以想成是一个数组,从一头进入,一头出去,FIFO,先进先出。阻塞队列: BlockingQueue 阻塞队列,排队拥堵,首先它是一个队列,而一个阻塞队列在数据结构中所原创 2020-12-26 14:58:23 · 130 阅读 · 0 评论 -
JUC之CountDownLatch、CyclicBarrier和Semaphore
JUC之CountDownLatch、CyclicBarrier和Semaphore1 CountDownLatch1.1 简单介绍1.2 简单使用2 CyclicBarrier2.1 简单介绍2.2 简单使用3 Semaphore:信号量3.1 简单介绍3.2 简单使用1 CountDownLatch1.1 简单介绍作用: 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程就会被阻塞。其它线程调用CountD原创 2020-12-26 12:54:46 · 103 阅读 · 0 评论 -
JUC之公平与非公平锁、可重入锁、自旋锁、读写锁
JUC之公平与非公平锁、可重入锁、自旋锁、读写锁1 Java锁之公平锁和非公平锁1.1 概念1.2 两者区别2 可重入锁和递归锁ReentrantLock2.1 概念2.2 可重入锁的验证2.2.1 Synchronized可重入锁2.2.2 ReentrantLock可重入锁2.2.3 当我们在getLock方法加两把锁会是什么情况呢?3 Java锁之自旋锁3.1 概念及优缺点3.2 手写自旋锁4 独占锁(写锁) / 共享锁(读锁) / 互斥锁4.1 概念4.2 实现一个读写缓存的操作,假设开始没有加锁的原创 2020-12-25 18:23:40 · 220 阅读 · 0 评论 -
JUC之线程不安全的ArrayList、HashSet、HashMap
JUC之线程不安全的ArrayList、HashSet、HashMap1 线程不安全的ArrayList1.1 前言1.2 单线程下的ArrayList1.3 多线程下的ArrayList1.4 线程不安全的ArrayList,解决方案1.4.1 方案一: Vector1.4.2 方案二: Collections.synchronized()1.4.3 方案三: 采用JUC里面的方法-CopyOnWriteArrayList2 线程不安全的HashSet2.1 单线程下的HashSet2.2 多线程下的Ha原创 2020-12-25 12:17:45 · 128 阅读 · 0 评论 -
JUC之CAS
JUC之CAS1 CAS介绍1.1 CAS概念1.2 CAS的简单使用1.3 CAS底层原理1.3.1 Unsafe类1.3.2 变量valueOffset1.3.3 getAndAddInt方法1.4 CAS缺点1.5 ABA问题?1.5.1 代码验证ABA问题1.5.2 ABA问题的解决1 CAS介绍1.1 CAS概念CAS的全称是Compare-And-Swap,它是CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS并发原语体现在Java语原创 2020-12-25 10:34:36 · 219 阅读 · 0 评论 -
JUC之Volatile
JUC之Volatile1、谈谈对Volatile的理解1.1 JMM是什么?1.2 缓存一致性1.3 Volatile之可见性1.4 Volatile之原子性1.4.1 Volatile不保证原子性1.4.2 为什么Volatile不满足原子性(数据丢失问题)?1.4.3 如何Volatile解决不满足原子性(数据丢失问题)?1.5 Volatile之禁止指令重排1.5.1 Volatile为什么能解决指令重排问题?1.6 Volatile在哪里使用过?1.6.1 单例模式1、谈谈对Volatile原创 2020-12-25 00:27:03 · 220 阅读 · 0 评论