
JAVA并发
森林森
java学习
展开
-
对象字节码看并发编程的底层实现
线程模型对于 Hotspot 来说,每一个 Java 线程,都会映射到一条轻量级进程中(LWP,Light Weight Process)。轻量级进程是用户进程调用系统内核所提供的一套接口,实际上它还需要调用更加底层的内核线程(KLT,Kernel-Level Thread)。而具体的功能,比如创建、同步等,则需要进行系统调用。这些系统调用的操作,代价都比较高,需要在用户态(User Mode)和内核态(Kernel Mode)中来回切换,也就是我们常说的线程上下文切换( CS,Context Swi原创 2020-05-20 10:42:28 · 126 阅读 · 0 评论 -
ReentrantLock 独占锁学习
ReentrantLockReentrantLock 是可重入的独占锁 , 同 时 只能有 一个线程可 以 获取该锁,其他获取该锁的线程会被阻塞而被放入该锁的 AQS 阻塞队列里面ReentrantLock 最终还是使用 AQS 来实现的,并且根据参数来决定其 内 部是一个公平还是非公平锁,默认是非公平锁 public ReentrantLock() { sync...原创 2019-07-02 11:35:13 · 518 阅读 · 0 评论 -
Java之AQS简述
AQS简述AbstractQueuedSynchronizer 抽象同步队列简称 AQS ,它是实现同步器的 基 础组件,并发包中锁的底层就是使用 AQS 实现的.AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,AQS为一系列同步器依赖于一个单独的原子变量(state)的同步器提供了一个非常有用的基础。子类们必须定义改变state变量的protected方法,这些方法定...原创 2019-07-02 10:35:05 · 389 阅读 · 0 评论 -
Unsafe获取
介绍public native long objectFieldOffset方法:返回指定 的变量在所属类 中的内存偏移地址,该偏移地址仅仅在该 Unsafe 函数中访 问指定宇段时使用public native int arrayBaseOffset(Class<?> var1) 获取数组中第一个元素的地址public native int arrayIndex...原创 2019-07-01 16:21:06 · 615 阅读 · 0 评论 -
ThreadPoolExecutor 简单学习
Executors 其实是个工 具 类,里面提 供了好多静态方法,这些方法根据用 户 选择返回不同的线程池实例 。 ThreadPoo!Executor 继承了Abs tractExecutorService ,成员变量 ct! 是一个 Integer 的原子变量 ,用 来记录线程池状态和线程池中线程个数,类似于 ReentrantReadWriteLock 使用 一个变量来保存两种信息。...原创 2019-06-18 14:26:41 · 192 阅读 · 0 评论 -
ThreadLocal 学习
java.lang.ThreadLocalthreadLocal 类型的本地变量存放在具体的线程内存空间中 。 ThreadLocal 就是一个工具壳,它通过 set 方法把 value 值放入调用线程的 threadLocals 里面并存放起来 , 当调用 线程调用它的 get 方法时,再从当 前线程的 threadLocals 变量里面将其拿出来使用 。 如果调用线程一直不终止, 那么这个本...原创 2019-07-01 14:50:59 · 169 阅读 · 0 评论 -
DelayQueue学习
DelayQueue 并发队列是 一个无界阻塞延迟队 列 ,队列中的每个元素都有个过期时 间,当从队列获取元素时,只有过期元素才会出队列。队列头元素是最快要过期的元素。public class DelayQueue<E extends Delayed> extends AbstractQueue<E> implements BlockingQueue<E...原创 2019-06-05 17:33:52 · 129 阅读 · 0 评论 -
PriorityBlockingQueue学习
PriorityBlockingQueue结构PriorityB lockingQueue 是带优先级的无界阻塞队列,每次出队都返回优先级最高或者最低的元素。其内部是使用平衡二叉树堆实现的,所以直接遍历队列元素不保证有序。默认使用对象的 compareTo 方法提供比较规则,如果你需要自定义比较规则则可以自定义comparators 。PriorityBlockingQueue 内 部...原创 2019-06-05 17:05:23 · 303 阅读 · 0 评论 -
ArrayBlockingQueue学习
结构ArrayBlockingQueue 的内部有一个数组 items ,用来存放队列元素,putindex 变量表示入队元素下标, takelndex 是出队下标, cou nt 统计队列元素个数 。 从定义可知,这些变量并没有使用 volatile 修饰,这是因为访问这些变量都是在锁块内,而加锁己经保证了锁块内变量的内存可见性了 。 另外有个独占锁 lock 用来保证出、入队操作的...原创 2019-06-05 16:10:12 · 253 阅读 · 0 评论 -
LinkedBlockingQueue 学习
LinkedBlockingQueue独占锁实现的阻塞队列 LinkedB!ockingQueueLinkedB lockingQueue 也是使用单向链表实现的,其也有两个Node ,分别用来存放首、尾节点, 并且还有一个初始值为 0 的原子变量 count ,用来记录队列元素个数 。 另外还有两个 ReentrantLock 的实例,分别用来控制元素入队和出队的原子性,其中 take...原创 2019-06-05 15:41:21 · 218 阅读 · 0 评论