juc并发编程
文章平均质量分 53
所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生
cjh-Java
不积跬步,无以至千里
展开
-
并发编程3大基本特性(有序性、可见性、原子性)
在java内存模型中,共享变量存在于主内存,每个线程有独享的工作内存(为了提高处理速度,每个处理器都有自己的缓存,如闪存等)。当一个线程在一个处理器上修改了一个变量的值,这个值可能会暂时只存在于该处理器的缓存中,而其他处理器的缓存中仍然保留着旧值。如果两个操作之间存在数据依赖关系,即一个操作的结果是另一个操作的输入,则这两个操作不能被重排序,因为这会改变程序的执行结果。a. 编译器优化:编译器在编译过程中会进行一定程度的重排,例如将读取同一数据的操作放置在一起执行,以减少数据读取的时间开销和提高效率。原创 2024-03-18 21:15:00 · 1181 阅读 · 0 评论 -
ThreadLocal理论&实践
原创 2023-11-28 07:56:27 · 63 阅读 · 0 评论 -
推荐 - Java 代码解决生产者 --- 消费者问题(两种方法)
Java 代码解决生产者 — 消费者问题(两种方法)- 原文地址原创 2020-10-26 14:33:42 · 140 阅读 · 0 评论 -
教你一文认清读写锁的重要性(提高并发效率-JUC)
读写锁小结(java代码)写-写互斥读-写互斥读-读不互斥需要保证写操作的原子性 和 独占性,开始写入至写入完成是一个读写锁验证代码1.未加锁前代码package lock;import java.util.HashMap;import java.util.Map;class MyResource { // 缓存一定要加volatile,主要是保证缓存的可...原创 2020-04-06 21:20:06 · 687 阅读 · 0 评论 -
如何一文了解CountDownLatch(火箭发射倒计时-JUC)
CountDownLatch内容解释CountDownLatch只有带参数int n的构造器。表示从n开始至0倒计时,当Count为0时,则规定的操作才可以执行使用场景已知某个线程是用来做收尾工作的,只能等待其他前提线程都执行完时,这个收尾线程才能进行工作。则在初始化countDownLatch对象时,传入其他线程数。在每个线程内部执行完后调用countDownLatch.countDow...原创 2020-04-06 22:26:58 · 796 阅读 · 0 评论 -
如何一文了解Semaphore(信号量并发控制-JUC)
Semaphore的作用Semaphore限流:用于控制某一时刻的并发线程数 和 一个资源供多个线程的互斥使用。初始化new Semaphore(int n),n表示在某时刻最大接收的线程数在线程内部调用semaphore.acquire(),表示该线程被执行,此时信号数减1,当该线程执行完毕时调用semaphore.release(),信号量再加1。模拟就餐等待,某餐饮店5个餐位,某时...原创 2020-04-07 06:38:34 · 489 阅读 · 0 评论 -
如何一文了解CyclicBarrier(可重复使用的栅栏阻塞-JUC)
简介CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程使用await()方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。直到parties个参与线程都调用了await方法,那么栅栏将打开,此时所有被栅栏拦截的线程都将继续往下执行,而栅栏将被重置以便下次使用。模拟6人员会议,先到的人员等待...原创 2020-04-07 07:00:16 · 1564 阅读 · 0 评论 -
教你一文了解阻塞队列(资源存放地-JUC)
1.简介阻塞队列 BlockingQueue:阻塞即线程想要获取资源却没有资源的现象,队列即先进先出数据结构 ,是生产者存放元素的容器,而消费者也只从容器里拿元素。当阻塞队列为空时,从队列中获取元素的Thread1操作将会被阻塞当阻塞队列为满时,从队列中添加元素的Thread2操作将会被阻塞2.场景餐饮店餐位被占满后,此时如果还有客人到来,餐饮店应该让后来的这些客人去等待区等待,不...原创 2020-04-07 09:37:27 · 915 阅读 · 0 评论 -
教你一文了解SynchronousQueue(单一资源队列-JUC)
简介SynchronousQueue实现BlockingQueue接口,是没有容量,无缓冲等待,并且内部不存储元素的阻塞队列,里面只能存在最多一个元素,也就是说:SynchronousQueue类的put/offer操作,必须等待take/poll操作唤醒,take操作必须put操作唤醒,没有take操作,多个put操作都堵塞,等待一个一个take操作来一个一个唤醒,同理,take操作也一样,生...原创 2020-04-07 11:33:56 · 561 阅读 · 0 评论 -
教你一文读清synchronized 和 Lock的优缺点(同步锁-JUC)
1.从多维度解析synchronized 和 Lock的区别1.原始构成区别 synchronizezd是关键字属于JVM层面 monitorenter - 进入 monitorexit - 离开底层是通过monit...原创 2020-04-07 15:05:16 · 1264 阅读 · 0 评论 -
教你一文读清线程通信之阻塞队列版(JUC编程)
简介在java语言中实现线程通信经历了三个阶段:- synchronized- Lock- BlockingQueue*可通过下面的链接认识第一、二阶段的线程通信**[一文读清synchronized 和 Lock的优缺点](https://blog.csdn.net/fujuacm/article/details/105363363)**可通过下面的链接认识第三阶段的核心类Bloc...原创 2020-04-07 17:33:26 · 532 阅读 · 0 评论 -
教你一文读清线程池的优势和底层实现(JUC编程)
1.线程池简介线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了线程池的最大数量,则超出部分的线程在等候区排队等候,等其他线程执行完毕,再从队列中取出任务来执行。他的主要特点是:线程复用;控制最大并发数;管理线程。他的主要优点有:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度:当任务到达...原创 2020-04-08 09:11:31 · 607 阅读 · 0 评论 -
教你读清四种方式创建线程的优缺点(JUC编程)
1.四种线程创建方式简介继承Thread类缺点:- 继承耦合度高- 单继承被占用- 按照逻辑来判断,继承是is-a的关系,即某个对象是一个线程,不符合客观世界的继承关系实现Runnable接口优点:- 实现接口的耦合度降低- 可以多实现,不占用继承实现Callable< T >,配合FutureTask< T >获取线程返回值优点:- 承接了实现R...原创 2020-04-08 09:12:57 · 698 阅读 · 0 评论