JUC-Semaphore

2022-3-13 diaba 多线程

package com.jiucaiyuan.net.juc.lock; import java.util.Random; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; /** * 信号灯(许可数量) * 6辆车,3个车位 * @Author jiucaiyuan 2022/3/13 22:57 * @mail services@jiucaiyuan.net */ public class SemaphoreDemo { publ...

阅读全文>>

评论(0) 浏览(624)

JUC-CyclicBarrier

2022-3-13 diaba 多线程

package com.jiucaiyuan.net.juc.lock; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * 循环栅栏 * 集齐7龙珠召唤神龙 * * @Author jiucaiyuan 2022/3/13 22:48 * @mail services@jiucaiyuan.net */ public class CyclicBarrierDemo { public sta...

阅读全文>>

评论(0) 浏览(595)

JUC-CountDownLatch

2022-3-13 diaba 多线程

package com.jiucaiyuan.net.juc.lock; import java.util.concurrent.CountDownLatch; /** * 演示CountDownLatch * 6个同学陆续离开教室之后,班长才能锁门 * * @Author jiucaiyuan 2022/3/13 22:40 * @mail services@jiucaiyuan.net */ public class CountDownLatchDemo { public static void main(String[] args) ...

阅读全文>>

评论(0) 浏览(557)

开启三个线程打印ABC-synchronized锁和wait,notifyAll

2022-3-8 diaba 多线程

package com.jiucaiyuan.net.thread; /** * * 题目: * 编写程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印十次, * 要求输出结果必须按照ABC的顺序显示,如:ABCABCACB… * * 非指定线程唤醒。采用synchronized锁和wait,notifyAll配合使用。 * 这个方法有一个缺点,那就是notifyAll是唤醒其它两个线程, * 其它两个竞争获取锁会引起上下文切换,从而引起不必要的开销,因此,建议使用方法一。 * * */ class Pri...

阅读全文>>

评论(0) 浏览(601)

【推荐】开启三个线程打印ABC-ReentrantLock+Condition

2022-3-8 diaba 多线程

package com.jiucaiyuan.net.thread; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; /** * <p> * 题目: * 编写程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印十次, * 要求输出结果必须按照ABC的顺序显示,如:ABCABCABC... * * 指定线程唤醒轮循打印,使用ReentrantLock和Condition。 本...

阅读全文>>

评论(0) 浏览(599)

【转】深度解析Java 8:AbstractQueuedSynchronizer的实现分析(下)

2017-3-10 diaba 多线程

前言 经过本系列的上半部分JDK1.8 AbstractQueuedSynchronizer的实现分析(上)的解读,相信很多读者已经对AbstractQueuedSynchronizer(下文简称AQS)的独占功能了然于胸,那么这次我们通过对另一个工具类:CountDownLatch的分析来解读AQS的另外一个功能:共享功能。 AQS共享功能的实现 在开始解读AQS的共享功能前,我们再重温一下CountDownLatch,CountDownLatch为java.util.concurrent包下的计数器工具类,常被用在多线程环境下,它在初始时需要指定一个计数...

阅读全文>>

评论(0) 浏览(2564)

【转】深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析(上)

2017-2-21 diaba 多线程

前言 Java中的FutureTask作为可异步执行任务并可获取执行结果而被大家所熟知。通常可以使用future.get()来获取线程的执行结果,在线程执行结束之前,get方法会一直阻塞状态,直到call()返回,其优点是使用线程异步执行任务的情况下还可以获取到线程的执行结果,但是FutureTask的以上功能却是依靠通过一个叫AbstractQueuedSynchronizer的类来实现,至少在JDK 1.5、JDK1.6版本是这样的(从1.7开始FutureTask已经被其作者Doug Lea修改为不再依赖AbstractQueuedSynchronizer实现了,这是...

阅读全文>>

评论(0) 浏览(2224)

【转】从根源上解析 Java volatile 关键字的实现

2017-2-21 diaba 多线程

1、解析概览 内存模型的相关概念 并发编程中的三个概念 Java内存模型 深入剖析Volatile关键字 使用volatile关键字的场景 2、内存模型的相关概念 缓存一致性问题。通常称这种被多个线程访问的变量为共享变量。 也就是说,如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能存在缓存不一致的问题。 为了解决缓存不一致性问题,通...

阅读全文>>

评论(0) 浏览(2181)

并行与并发的概念

2015-12-27 diaba 多线程

并行:同一时刻,同时发生    类似网络带宽概念 并发:同一时间间隔内发生    类似网络吞吐量概念

阅读全文>>

标签: 并发 并行

评论(0) 浏览(1840)

【转】Java多线程-工具篇-BlockingQueue

2015-12-22 diaba 多线程

前言:      在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。 认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示: 从上图我们可以很清楚看到,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出;...

阅读全文>>

标签: BlockingQueue

评论(0) 浏览(1760)

CountDownLatch用法

2015-11-1 diaba 多线程

CountDownLatch是一个同步辅助类 主要方法是: public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedException 使用场景:     当一组操作tasks完成后,才能执行任务taskB,该组操作tasks可以并发完成,没有先后顺序,但是taskB必须在tasks都完成之后才能开始执行。 实现上述业务场景的方法是: ...

阅读全文>>

标签: CountDownLatch 线程同步 任务同步

评论(0) 浏览(2376)

Powered by emlog 京ICP备15045175号-1 Copyright © 2022