![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 90
JUC并发编程
梓源先生
技术改变世界
展开
-
5-3阻塞队列的应用-线程池
1线程池基本概念概念:线程池主要是控制运⾏线程的数量,将待处理任务放到等待队列,然后创建线程执行这些任务。 如果超过了最⼤线程数,则等待。为什么用线程池?10年前单核CPU电脑,假的多线程,像马戏团小丑玩多个球,CPU需要来回切换。现在是多核电脑,多个线程各⾃跑在独立的CPU上,不用切换效率高。线程池的优点:线程池做的工作只要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再原创 2021-11-02 14:50:37 · 169 阅读 · 0 评论 -
5-2阻塞队列的应用-生产者消费者
1虚假唤醒什么是虚假唤醒?参考网上的一个问题和回答:问题:java多线程中虚假唤醒的原因都有什么?网上查到的定义是说,线程在没有调用过notify()和notifyAll()的情况下醒来,是虚假唤醒。这是什么原因会导致的呢?回答:虚假唤醒(spurious wakeup)是一个表象,即在多处理器的系统下发出wait的程序有可能在没有notify唤醒的情形下苏醒继续执行。以运行在linux的hotspot虚拟机上的java程序为例,wait方法在jvm执行时实质是调用了底层pthread_原创 2021-10-29 18:19:45 · 107 阅读 · 0 评论 -
5-1阻塞队列
概念:在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),⼀旦条件满足,被挂起的线程又会自动被唤醒。阻塞队列 是⼀个队列,在数据结构中起的作用如下图:当队列是空的,从队列中获取(Take)元素的操作将会被阻塞当队列是满的,从队列中添加(Put)元素的操作将会被阻塞试图中空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素试图向已满的队列中添加新元素的线程将会被阻塞,直到其他线程从队列中移除⼀个或多个元素或者完全清空,使队列变得空闲起来后并后续新增好处:阻塞原创 2021-10-29 11:19:31 · 182 阅读 · 0 评论 -
04并发编程常用辅助类
1CountDownLatch(倒计时门闩)CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行:确保某个计算在其需要的所有资源都被初始化之后才继续执行; 确保某个服务在其依赖的所有其他服务都已经启动之后才启动; 等待直到某个操作所有参与者都准备就绪再继续执行CountDownLatch 内部维护了⼀个计数器,只有当计数器==0时原创 2021-10-26 11:32:38 · 97 阅读 · 0 评论 -
03多线程常见锁
1公平锁、非公平锁概念:所谓公平锁,就是多个线程按照申请锁的顺序来获取锁,类似排队,先到先得。而非公平锁,则是多个线程抢夺锁,会导致优先级反转或饥饿现象区别:公平锁在获取锁时先查看此锁维护的等待队列,为空或者当前线程是等待队列的队列,则直接占有锁,否则插⼊到等待队列,FIFO原则。非公平锁比较粗鲁,上来直接先尝试占有锁,失败则采⽤公平锁方式。非公平锁的优点是吞吐量比公平锁更大。synchronized 和 juc.ReentrantLock 默认都是非公平锁。ReentrantLock 在..原创 2021-10-25 18:03:39 · 2240 阅读 · 0 评论 -
02集合类不安全问题
1ArrayList与CopyOnWriteArrayListArrayList 不是线程安全类,在多线程同时写的情况下,会抛出java.util.ConcurrentModificationException 异常。看以下代码 private static void listDemo() { List<String> list = new ArrayList<>();// List<String> list = n原创 2021-10-22 16:03:46 · 91 阅读 · 0 评论 -
01volatile关键字
1JUC并发包API 包介绍1.1JUC简介在 Java 5.0 提供了 java.util.concurrent (简称JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的 Collection 实现等java.util.concurrent.atomic1. AtomicInteger 原子性引用java.util.concurre...原创 2021-10-21 14:32:34 · 109 阅读 · 0 评论 -
00Java多线程
1基本概念:程序、进程、线程 程序:是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程:是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。——生命周期程序是静态的,进程是动态的 进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域 线程:进程中包含一个或多个线程,是一个程序内部的一条执行路径。若一个进程同一时间并行执行多个线程,就是支持多线程...原创 2021-10-15 15:00:08 · 98 阅读 · 0 评论