
并发
是小白哇
因为无知、所以追逐
展开
-
ConcurrentHashMap源码分析
final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == null || value == null) throw new NullPointerException(); //获取key的hash值 int hash = spread(key.hashCode()); int binCount...原创 2020-04-12 13:59:55 · 943 阅读 · 0 评论 -
Random和ThreadLocalRandom原理分析
Random和ThreadLocalRandom原理分析原创 2020-04-02 01:01:55 · 965 阅读 · 0 评论 -
Semaphore源码分析
Semaphore通常用于在程序中做限流使用,控制一段程序同时只能有n个线程同时访问。既然是同时有多个线程能同时访问,那Semaphore是用的肯定就是共享锁。其原理就是有线程获取了锁,就对state减,释放锁后就对state加。state小于0的时候,就对线程阻塞。一旦释放了锁,就唤醒等待线程。Semaphore是通过共享锁实现的,如果对ReentrantReadWriteLock不熟悉的,...原创 2020-03-29 17:39:24 · 668 阅读 · 0 评论 -
CountDownLatch源码分析
CountDownLatch的作用,就是将多个线程阻塞,等待某一事件触发后,再同时将阻塞的多个线程放行。如果你对ReentrantLock,ReentrantReadWriteLock足够了解的话,通过CountDownLatch的功能,不难想到,CountDownLatch要阻塞多个线程并做到同时放行,所以他的await肯定是使用的共享锁进行阻塞。而创建CountDownLatch的时候,指定...原创 2020-03-29 16:24:07 · 596 阅读 · 0 评论 -
ReentrantReadWriteLock源码分析
public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared(arg); }protected final int tryAcquireShared(int unused) { /* * Walkthrough: ...原创 2020-03-29 13:17:56 · 645 阅读 · 0 评论 -
ReentrantLock Condition源码分析
Condition.awaitpublic final void await() throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); //将当前线程封装为Node节点加入到wait队列中 Node node = addCondit...原创 2020-03-28 23:57:06 · 694 阅读 · 0 评论 -
ReentrantLock源码分析
ReentrantLock实现源码分析原创 2020-03-28 00:02:13 · 1130 阅读 · 1 评论 -
Thread.yield原理分析
Thread.yield()方法的作用是暂时放弃当前线程对CPU的占用权,将它让给其它线程。他是如何实现的呢?通过看yield源码,发现其是本地方法,找到其在JVM中的源码实现如下:JVM_ENTRY(void, JVM_Yield(JNIEnv *env, jclass threadClass)) JVMWrapper("JVM_Yield"); //判断操作系统是否允许使用Yield...原创 2020-02-24 00:49:30 · 1762 阅读 · 0 评论 -
Thread.join()方法原理分析
如果现在有这样一个场景:在主线程中创建两个线程T1和T2,通过start启动线程后。我们想T1结束了再执行T2,等T1和T2都执行结束,才继续执行主线程,怎么能做到呢?其实很简单,通过join就可以实现:public class JoinDemo { private static int count = 0; public static void main(String[] a...原创 2020-02-23 23:59:19 · 779 阅读 · 0 评论 -
Wait与notify/notifyAll源码分析
要理解看懂下面讲解的Wait和notify/notifyAll实现原理,首先要弄明白synchronized的实现原理。synchronized的实现原理可以查看上篇文章。原创 2020-01-18 22:10:38 · 1187 阅读 · 2 评论 -
从源码分析Synchronized实现原理
线程安全:1、多个线程操作共享资源。2、对共享资源的操作会使得共享资源发生变化。public class SecurityDemo { private static int count = 0; public static void main(String[] args) throws InterruptedException { for (int i = 0...原创 2020-01-14 21:10:21 · 1923 阅读 · 2 评论 -
Volatile全面解析,实现原理及作用分析
在java中,volatile有两个作用,一个是禁止指令重排序(编译时指令重排序 和 CPU乱序执行)。另一个是保证多线程共享变量的可见性。为了讲解volatile时如何禁止指令重排序,防止CPU乱序执行,以及保证变量内存可见性。首先我们需要了解这些概念,即什么是编译时指令重排序?为什么要指令重排序?为什么CPU会乱序执行?什么事内存可见性?之后,再来看volatile做了什么。1 编译时指令重...原创 2020-02-23 19:37:06 · 3265 阅读 · 5 评论 -
java线程状态变更及中断实现
java创建线程的几种方式1、实现Runnable接口。public class RunnableDemo implements Runnable{ public static void main(String[] args) { //写法1 new Thread(new RunnableDemo(), "runnable线程1").start();...原创 2019-12-02 22:26:35 · 1083 阅读 · 2 评论