
JUC
JUC
伊布拉西莫
思想上的强者,行动上的弱者。
展开
-
伪共享
java并发编程之美 学习笔记什么是伪共享Cache为了解决计算机系统中主内存和CPU之间的运行速度差问题,会在CPU和主内存之间添加一级或多级高速缓冲存储器(Cache). 这个缓存一般是集成到CPU内部的,所以也叫CPU cache.缓存行(Cache行)在cache内是按行存储的,其中每一行称之为一个Cache行.Cache行是Cache与内存进行数据交换的单位,Cache行...原创 2019-04-04 17:38:35 · 103 阅读 · 0 评论 -
ArrayBlockingQueue
java并发编程之美 学习笔记ArrayBlockingQueue总体结构public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { final Object[] it...原创 2019-04-17 11:05:29 · 87 阅读 · 0 评论 -
PriorityBlockingQueue+DelayQueue
java并发编程之美 学习笔记PriorityBlockingQueuePriorityBlockingQueue是带优先级的、无界的、阻塞队列,每次出队都返回优先级最高或者最低的元素。结构public class PriorityBlockingQueue<E> extends AbstractQueue<E> implements BlockingQ...原创 2019-04-17 16:52:14 · 64 阅读 · 0 评论 -
ThreadPoolExecutor
java并发编程之美 学习笔记线程池主要解决两个问题:当大量执行异步任务时线程池能够提供较好的性能。(不使用线程池时,创建异步任务都需要new线程来执行,而线程的创建和销毁是有一定开销的)。线程池中的线程是可复用的,无需每次执行异步任务都新建和销毁。线程池提供了一种资源限制和管理的手段。如限制线程个数,动态新增线程等。线程池也提供了许多可调参数和可扩展性接口 ,以满足不同情境的需要...原创 2019-12-24 11:04:43 · 95 阅读 · 0 评论 -
Callable、Future和FutureTask解析
引用自:http://www.importnew.com/17572.htmljava创建线程有两种方式:一种是直接继承Thread另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就提供了Calla...原创 2019-04-29 15:42:20 · 685 阅读 · 0 评论 -
ScheduledThreadPoolExecutor
java并发编程之美 学习笔记ScheduledThreadPoolExecutor 是一个可以在指定延时时间后执行或定时执行的任务调度线程池.原创 2019-04-29 16:57:31 · 94 阅读 · 0 评论 -
Fok/join Pool
引用 ifevework-stealing算法工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。那么为什么需要使用工作窃取算法呢?假如我们需要做一个比较大的任务,我们可以把这个任务分割为若干互不依赖的子任务,为了减少线程间的竞争,于是把这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应,比如A线程负责处理...原创 2019-04-29 17:36:26 · 99 阅读 · 0 评论 -
Semaphore
java并发编程之美 学习笔记Semaphoredemo实现CountDownLatch功能public class SemaphoreTest1 { private static Semaphore semaphore = new Semaphore(0); public static void main(String[] args) throws InterruptedExc...原创 2019-07-24 10:31:54 · 68 阅读 · 0 评论 -
CountDownLatch
java并发编程之美 学习笔记CountDownLatchdemocodepublic class CountDownLatchTest { static CountDownLatch countDownLatch = new CountDownLatch(2); public static void main(String[] args) throws InterruptedEx...原创 2019-05-13 11:21:16 · 84 阅读 · 0 评论 -
CyclicBarrier
java并发编程之美 学习笔记CyclicBarrierCyclicBarrier(回环屏障)原创 2019-05-13 15:46:16 · 96 阅读 · 0 评论 -
LongAdder类
java并发编程之美 学习笔记AtomicLong的局限性JUC并发包中包含有Atomic*原子操作类,他们的原理类似,下面以AtomicLong类似。在Unsafe类对AtomicLong做了比较详细的介绍,这里不再赘述。这里只分析下这个AtomicLong的局限性://java.util.concurrent.atomic.AtomicLong public final lo...原创 2019-04-10 09:25:10 · 102 阅读 · 0 评论 -
ThreadLocalRandom类
java并发编程之美 笔记ThreadLocalRandom是在jdk7之后在JUC包下新增的随机数生成器,补充了Random在多线程下的缺陷。在学习它之前,我们先学习下Random类。Random类创建APIspublic class Random implements java.io.Serializable { private final AtomicLong seed;...原创 2019-04-03 16:40:40 · 109 阅读 · 0 评论 -
ThreadLocal类
java并发编程之美 学习笔记示例public class MyThreadLocalTest1 { static ThreadLocal<Integer> localVariable = new ThreadLocal<>(); static final int THREAD_NUM = 5; static void safe(int index) {...原创 2019-04-03 16:13:10 · 173 阅读 · 0 评论 -
CopyOnWriteArrayList
java并发编程之美 学习笔记JUC包中并发List只有CopyOnWriteArrayList一个。CopyOnWriteArrayList是一个线程安全的List,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。CopyOnWriteArrayList属性public class CopyOnWriteArrayList<E>...原创 2019-07-17 15:31:49 · 147 阅读 · 0 评论 -
LockSupport
java编程之美 学习笔记LockSupportLockSupport是用来创建锁和其他同步类的基本线程阻塞原语 ,此类以及每个使用它的线程与一个许可关联。它的主要作用是挂起和唤醒线程,内部是使用Unsafe类实现的.demo例park()如果调用park方法的线程已经拿到了LockSupport关联的许可证,则调用LockSupport.park()会立即返回,否则会阻塞。pub...原创 2019-04-10 20:00:48 · 66 阅读 · 0 评论 -
AbstractQueuedSynchronizer
java并发编程之美 学习笔记AbstractQueuedSynchronizerAbstractQueuedSynchronizer简称AQS,它是实现同步器的基础组件(如:ReentrantLock,Semaphore,CountDownLatch)。AQSpublic abstract class AbstractQueuedSynchronizer extends Abstra...原创 2019-04-11 22:33:20 · 79 阅读 · 0 评论 -
ReentrantLock
java并发编程之美 学习笔记独占锁 ReentrantLock结构public class ReentrantLock implements Lock, java.io.Serializable { private final Sync sync; //Sync 类直接继承自 AQS , abstract static class Sync extends Abstra...原创 2019-04-11 16:32:20 · 84 阅读 · 0 评论 -
Unsafe类
java并发编程之美 学习笔记JDK的rt.jar包中的Unsafe类提供了硬件级别的原子性操作,Unsafe类中绝大多数方法都是native的,在学习Unsafe之前我们先看下AtomicLongAtomicLongpublic class AtomicLong extends Number implements java.io.Serializable { //下面会详细介绍Uns...原创 2019-04-02 21:35:28 · 204 阅读 · 0 评论 -
StampedLock
java并发编程之美 学习笔记StampedLockStampedLock是jdk8之后新增的一个锁,该锁提供了三种模式的读写控制。当调用获取锁的函数时,会返回一个long型变量,我们称之为戳记(stamp),这个戳记代表了锁的状态。tryXXXLock:获取锁失败返回的stamp=0.在释放锁unlock(stamp)需要将获取锁时的stamp传入.StampedLock提供...原创 2019-04-12 11:06:20 · 83 阅读 · 0 评论 -
ReentrantReadWritelock
java并发编程之美 笔记读写锁ReentrantReadWritelock结构public class ReentrantReadWriteLock implements ReadWriteLock, java.io.Serializable { private final ReentrantReadWriteLock.ReadLock readerLock;...原创 2019-04-12 11:06:46 · 91 阅读 · 0 评论 -
JUC-Queue
java并发编程之美 学习笔记JUC并发队列jdk提供了一系列场景的并发安全的队列。按照实现方式的不同分为:阻塞队列:—使用锁实现非阻塞队列: — 使用cas算法实现.ConcurrentlinkedQueueConcurrentlinkedQueue 是线程安全的无界的非阻塞队列...原创 2019-04-17 11:13:58 · 83 阅读 · 0 评论 -
LinkedBlockingQueue
java并发编程之美 学习笔记LinkedBlockingQueueLinkedBlockingQueue使用独占锁实现有界的阻塞队列。总体结构public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.i...原创 2019-04-15 21:26:33 · 76 阅读 · 0 评论 -
SynchronousQueue
引自 https://segmentfault.com/a/1190000011207824SynchronousQueue,实际上它不是一个真正的队列,因为它不会为队列中元素维护存储空间。其中每个插入(put)操作必须等待另一个线程的对应移除(take)操作. public void test01() throws InterruptedException { final Bl...原创 2019-07-24 17:00:51 · 210 阅读 · 0 评论