
java并发编程
文章平均质量分 71
WeiJiFeng_
这个作者很懒,什么都没留下…
展开
-
通过Condition实现wait与指定线程notify
Object 的 wait / notify / notifyAll 几个方法可以实现对线程的挂起和唤醒。ReentrantLock 也可以,不过要借助我们的 Condition 条件监视器,而且 Object 唤醒部分县城是随机唤醒,Condition 使得线程唤醒是可控的,可以指定唤醒部分线程。 首先我们用 ReentrantLock 和 Condition 实现 Object 中对应的...原创 2018-08-15 19:41:32 · 1438 阅读 · 0 评论 -
通过demo对比了解Volatile的实现
Volatile的定义 volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。 上面的定义有两层含义: 1,保证共享变量的可见性,但无法保证原子性 2,防止指令重排Volatile的可见性 一个变量如果用volatile修饰了,则Java可以确保所有线...原创 2018-08-15 14:32:28 · 1114 阅读 · 0 评论 -
调用wait,notify,sleep方法对锁资源的处理
我们知道wait和sleep方法可以将一个线程阻塞的目的。wait是将线程从Running变为waiting,直到被notify或者notifyAll,才会将线程从waiting状态变成Runnable状态。sleep是在一段时间内将线程从Running变为waiting,时间过去之后,线程进入Runnable状态。 在状态转换的时候,锁资源发生什么变化呢?首先我们用一个dem...原创 2018-08-14 19:22:43 · 750 阅读 · 0 评论 -
ReentrantReadWriteLock源码分析,java8
一,关系简介二, 实现 2.1 Sync的成员变量 2.2 构造器 2.3 lock() 2.4 ReadLock.lock()流程图关系简介 在这个关系很乱的UML图中,我们可以发现ReentrantReadWriteLock实现了ReadWriteLock接口,内部类有Sync(锁的实现),NonfairSync,FairSync公平锁与非公平锁,Wr...原创 2018-08-14 14:54:28 · 459 阅读 · 0 评论 -
解读可重入锁——ReentrantLock&AQS,java8
1 , ReentrantLock简介 首先我们可以查看ReentrantLock类,实现了Lock接口,其内部类都直接或者间接的继承了AQS类,则AQS肯定与ReentrantLock关系密切 我们来个demo,让大家更直接的了解重入锁: 2, 构造器MyReentrantLock是为了写自己理解的注释,改了一下类名 /** * Reen...原创 2018-08-03 21:31:07 · 1008 阅读 · 0 评论 -
4个子线程计数,每个线程都计数25次
要求主线程执行在子线程执行之后。 这个很好办,子线程都设为不是守护线程然后处理4个子线程我们可以让每个线程向如下static class MyThread { public static void start(int begin, int step){ Thread t = new Thread(()->{ ...原创 2018-05-06 00:12:21 · 876 阅读 · 0 评论