![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
阿萨德执行
这个作者很懒,什么都没留下…
展开
-
多线程-JUC学习-JUC集合-BlockingQueue
阻塞队列 BlockingQueuejava.util.concurrent 包里的 BlockingQueue 接口表示一个线程放入和提取实例的队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2)支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空BlockingQueue 用法BlockingQueue ...原创 2020-06-05 18:25:51 · 182 阅读 · 0 评论 -
多线程-JUC学习-JUC集合-Map
ConcurrentHashMap纸质版深入了解了1.8的原理。此处不进行整理。后面有时间加上1.ConcurrentSkipListMap1.1 ConcurrentSkipListMap介绍ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景。 ConcurrentSkipListMap和TreeMap,它们虽然都是有序的哈希表。但是,第一,它们的线程安全机制不同,TreeMap是非线程安全的,而ConcurrentSkipListMap是线程安全的。第二原创 2020-06-05 15:10:08 · 213 阅读 · 0 评论 -
多线程-JUC学习-JUC集合-List和Set
1. CopyOnWriteArrayList1.1 CopyOnWriteArrayList介绍它相当于线程安全的ArrayList。和ArrayList一样,它是个可变数组;但是和ArrayList不同的时,它具有以下特性:它最适合于具有以下特征的应用程序:List 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。 它是线程安全的。 因为通常需要复制整个基础数组,所以可变操作(add()、set() 和 remove() 等等)的开销很大。 迭代器支持hasN原创 2020-06-05 14:59:29 · 328 阅读 · 0 评论 -
多线程-JUC学习-JUC集合-框架
1. List和SetJUC集合包中的List和Set实现类包括:CopyOnWriteArrayList,CopyOnWriteArraySet和ConcurrentSkipListSet。ConcurrentSkipListSet稍后在说明Map时再说明,CopyOnWriteArrayList 和 CopyOnWriteArraySet的框架如下图所示:CopyOnWriteArrayList相当于线程安全的ArrayList,它实现了List接口。CopyOnWriteArrayLi..原创 2020-06-05 14:44:27 · 201 阅读 · 0 评论 -
多线程-JUC学习-锁-11.共享锁-Semaphore
1、Semaphore简介Semaphore是一个计数信号量,它的本质是一个"共享锁"。信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。Semaphore的函数列表// 创建具有给定的许可数和非公平的公...原创 2019-11-20 15:24:55 · 179 阅读 · 0 评论 -
多线程-JUC学习-锁-10.共享锁-CyclicBarrier
1、CyclicBarrier简介CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。注意比较CountDownLatch和CyclicBarrier:CountDownLatch的作用是允许1或N个线程等待其他线程完...原创 2019-11-20 14:04:12 · 277 阅读 · 0 评论 -
多线程-JUC学习-锁-9.共享锁-CountDownLatch
1、CountDownLatch简介CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。CountDownLatch和CyclicBarrier的区别(01) CountDownLatch的作用是允许1或N个线程等待其他线程完成执行;而CyclicBarrier则是允许N个线程相互等待。(02) CountDownL...原创 2019-11-19 17:30:53 · 94 阅读 · 0 评论 -
多线程-JUC学习-锁-8.共享锁-ReentrantReadWriteLock
本章对Java的“共享锁”进行介绍,JUC中的共享锁有CountDownLatch, CyclicBarrier, Semaphore, ReentrantReadWriteLock等;本章会以ReentrantReadWriteLock为蓝本对共享锁进行说明。1、ReadWriteLock 和 ReentrantReadWriteLock介绍ReadWriteLock,顾名思义,是读写锁...原创 2019-11-19 10:10:33 · 123 阅读 · 0 评论 -
多线程-JUC学习-锁-7.LockSupport
1、LockSupport介绍LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到“Thread.suspend 和 Thread.resume所可能引发的死锁”问题。因为park() 和 unpark()有许可的存在;调用 park(...原创 2019-11-15 15:03:26 · 106 阅读 · 0 评论 -
多线程-JUC学习-锁-6.Condition条件
转载出处:http://www.cnblogs.com/skywang12345/p/3496716.html1、Condition介绍Condition的作用是对锁进行更精确的控制。Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相...原创 2019-11-12 15:56:03 · 114 阅读 · 0 评论 -
多线程-JUC学习-锁-5.ReentrantLock非公平锁-源码分析
转载出处:http://www.cnblogs.com/skywang12345/p/3496651.html1、获取非公平锁(基于JDK1.7.0_40)非公平锁和公平锁在获取锁的方法上,流程是一样的;它们的区别主要表现在“尝试获取锁的机制不同”。简单点说,“公平锁”在每次尝试获取锁时,都是采用公平策略(根据等待队列依次排序等待);而“非公平锁”在每次尝试获取锁时,都是采用的非公平策略(...原创 2019-11-11 15:43:38 · 124 阅读 · 0 评论 -
多线程-JUC学习-锁-4.ReentrantLock公平锁-释放锁-源码解析
转载出处:http://www.cnblogs.com/skywang12345/p/3496147.html目录释放公平锁(基于JDK1.7.0_40)1. unlock()2. release()3. tryRelease()4. unparkSuccessor()总结释放公平锁(基于JDK1.7.0_40)1. unlock()unlock()在Ree...原创 2019-11-11 14:10:34 · 103 阅读 · 0 评论 -
多线程-JUC学习-锁-3.ReentrantLock公平锁-获取锁-源码解析
转载出处:http://www.cnblogs.com/skywang12345/p/3496147.html目录转载出处:http://www.cnblogs.com/skywang12345/p/3496147.html1、ReentrantLock数据结构2、lock获取公平锁过程1. lock()2. acquire()2.1. tryAcquire()...原创 2019-11-11 11:42:04 · 179 阅读 · 0 评论 -
为什么wait,notify,notifyAll定义在Object中?
这是个设计相关的问题,它考察的是面试者对现有系统和一些普遍存在但看起来不合理的事物的看法。回答这些问题的时候,你要说明为什么把这些方法放在Object类里是有意义的,还有不把它放在Thread类里的原因。一个很明显的原因是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。如果线程需要等待某些锁那么调用对象中的wait()方法就有意义了。如果wait()方法定义在Thread类...转载 2019-11-04 14:08:23 · 498 阅读 · 1 评论 -
多线程-JUC学习-锁-2.互斥锁ReentrantLock
ReentrantLock介绍ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是,ReentrantLock锁,可以被单个线程多次获取。ReentrantLock分为“公平锁”和“非公平锁”。它们的区别体现在获取锁的机制上是否公平。“锁”是为了保护竞争资源,防止多个线程同时操作线程...原创 2019-10-31 15:59:33 · 145 阅读 · 0 评论 -
多线程-JUC学习-锁-1.框架
JUC学习均来自skywang12345的分享:https://www.cnblogs.com/skywang12345/p/3496098.html前介:根据锁的添加到Java中的时间,Java中的锁,可以分为"同步锁"和"JUC包中的锁"。同步锁:即通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁。Java 1.0版本中就已经支持同步锁了...原创 2019-10-17 17:39:39 · 121 阅读 · 0 评论 -
多线程-AQS浅析
1. AQS简介AQS:AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等)。JUC包下的核心基础组件。也是实现大部分同步需求的基础。学习该组件是学习JUC绕不开的一块内容。AQS解决了子类实现同步器时涉及当的大量细节问题,例如获取同步...原创 2019-10-15 18:33:35 · 291 阅读 · 0 评论 -
多线程-内存模型的多线程
文章来源https://www.cnblogs.com/dolphin0520/p/3920373.html一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU...原创 2019-09-30 17:03:28 · 188 阅读 · 0 评论 -
多线程-深入了解volatile关键字
1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。存有严重疑问!!!(文末有强行解释,不知对错)这句话,我自己的理解就是:volatile修饰,java并没有使用MESI协议,也...原创 2019-09-30 17:54:22 · 172 阅读 · 0 评论 -
多线程-锁的分类-1.自旋锁
锁的公共父类接口/** * Created by zongx on 2019/10/9. */public interface ThreadLock { public void lock(); public void unlock();}自旋和阻塞的区别:自旋——线程反复检查锁变量是否可用。无线程上下文切换阻塞——让处理器去执行其他的可执行的线程。有线程上...原创 2019-10-08 16:15:29 · 137 阅读 · 0 评论 -
多线程-锁的分类-2.可重入的自旋锁
可重入的锁“可重入锁”的概念是:自己可以再次获得自己的内部锁。比如有一条线程获得了某个对象的锁,此时这个对象还没有释放,当其再次想获得这个对象的锁的时候还是可以获得的,如果不可锁重入的话,就会造成死锁。以上一个自选锁为例,其并不是一个可重入的锁,当使用这个锁时,如果线程进入一个加锁的方法A,再去调用另一个加锁的方法B,此时是进入不了方法B的。此处进行改造,升级为可重入的自旋锁。pac...原创 2019-10-09 15:59:21 · 100 阅读 · 0 评论 -
多线程-锁的分类-3.公平的自旋锁
公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。划重点:申请锁的顺序。之前的无论自旋锁还是重入锁都无法保证线程是按照申请锁的顺序进行线程的执行。此处进行改造。1. TicketSpinLockpackage lock.fairLock;import lock.ThreadLock;import java.util.concurrent.atomic.Atomi...原创 2019-10-09 17:52:29 · 169 阅读 · 0 评论 -
多线程-创建方式
1、Thread直接创建创建自定义类,继承自Thread,new多个自定义类后,使用start启动/** * Created by zongx on 2019/9/20. */public class MyThread extends Thread { public MyThread(String name) { super(name); } ...原创 2019-09-20 17:42:56 · 81 阅读 · 0 评论