IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 阻塞队列BlockingQueue和并发队列ConcurrentLinkedQueue你掌握多少 -> 正文阅读

[Java知识库]阻塞队列BlockingQueue和并发队列ConcurrentLinkedQueue你掌握多少

一、并发编程里面解决生产消费者模型你知道哪几种方式?

二、你知道阻塞队列BlockingQueue吗?介绍下常见的阻塞队列?

三、你知道非阻塞队列ConcurrentLinkedQueue吗,它怎么实现线程安全的??

四、???说说你认为的并发编程最佳实践?


一、并发编程里面解决生产消费者模型你知道哪几种方式?

核心:要保证生产者不会在缓冲区满时放入数据,消费者也不会在缓冲区空时消耗数据
常用的同步方法是采用信号或加锁机制

1、wait() / notify()方法
? ??
2、await() / signal()方法
? ? 用ReentrantLock和Condition实现等待/通知模型
?
3、Semaphore信号量
?
4、BlockingQueue阻塞队列
? ? ArrayBlockingQueue
? ? LinkedBlockingQueue
? ? ? ? put方法用来向队尾存入元素,如果队列满,则阻塞
? ?   ?take方法用来从队首取元素,如果队列为空,则阻塞?

以上4个都是基于单个应用的,分布式场景中无法使用。

二、你知道阻塞队列BlockingQueue吗?介绍下常见的阻塞队列?

BlockingQueue: j.u.c包下的提供了线程安全的队列访问的接口,并发包下很多高级同步类的实现都是基于阻塞队列实现的
?
1、当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满
2、从阻塞队列读数据时,如果队列为空,线程将会阻塞等待直到队列里面是非空的时候

常见的阻塞队列
? ? ArrayBlockingQueue:
? ? ? ? 基于数组实现的一个阻塞队列,需要指定容量大小,FIFO先进先出顺序
? ??
? ? LinkedBlockingQueue:
? ? ? ? 基于链表实现的一个阻塞队列,如果不指定容量大小,默认 Integer.MAX_VALUE, FIFO先进先出顺序
? ??
? ? PriorityBlockingQueue:
? ? ? ? 一个支持优先级的无界阻塞队列,默认情况下元素采用自然顺序升序排序,也可以自定义排序实现 java.lang.Comparable接口
? ??
? ? DelayQueue:
? ? ? ? 延迟队列,在指定时间才能获取队列元素的功能,队列头元素是最接近过期的元素,里面的对象必须实现 java.util.concurrent.Delayed 接口并实现CompareTo和getDelay方法?

三、你知道非阻塞队列ConcurrentLinkedQueue吗,它怎么实现线程安全的??

线程安全原因:
ConcurrentLinkedQueue是基于链表实现的无界线程安全队列,采用FIFO进行排序
保证线程安全的三要素:原子、有序、可见性
?
1、底层结构是Node,链表头部和尾部节点是head和tail,使用节点变量和内部类属性使用volatile声明保证了有序和可见性
?
2、插入、移除、更新操作使用CAS无锁操作,保证了原子性
?
3、假如多线程并发修改导致 CAS 更新失败,采用for循环插入保证更新操作成功

四、???说说你认为的并发编程最佳实践?

平时多线程用的挺多的,写出3条你遵循的多线程最佳实践?

?给不同模块的线程起名称,方便后续排查问题
?
使用同步代码块或者同步的方法的时候,尽量减小同步范围
?
多用并发集合少用同步集合
? ? 支持线程安全
? ? ? ? 同步集合:Hashtable/Vector/同步工具类包装Collections.synXXX
? ? ? ? 并发集合:ConcurrentHashMap、CopyOnWriteArrayList
?
线上业务需要使用多线程,优先考虑线程池是否更加合适,然后判断哪种线程池比较好,最后才是自己创建单一线程

用过线程池不? 有什么好处, java里有哪些是常用的线程池?

好处:重用存在的线程,减少对象创建销毁的开销,有效的控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞,且可以定时定期执行、单线程、并发数控制,配置任务过多任务后的拒绝策略等功能
?
类别
newFixedThreadPool?
? ? 一个定长线程池,可控制线程最大并发数
?
newCachedThreadPool
? ? 一个可缓存线程池
?
newSingleThreadExecutor
? ? 一个单线程化的线程池,用唯一的工作线程来执行任务
?
newScheduledThreadPool
? ? 一个定长线程池,支持定时/周期性任务执行

做Java开发这些年,线程池的使用细节和坑你真的了解吗?仔细看看吧~_这是王姑娘的微博的博客-CSDN博客一、【阿里巴巴编码规范】 线程池不允许使用 Executors 去创建,要通过 ThreadPoolExecutor的方式原因Executors创建的线程池底层也是调用 ThreadPoolExecutor,只不过使用不同的参数、队列、拒绝策略等,如果使用不当,会造成资源耗尽问题;直接使用ThreadPoolExecutor让使用者更加清楚线程池允许规则,常见参数的使用,避免风险?常见的线程池问题:newFixedThreadPool和newSingleThreadExecutor: ...https://blog.csdn.net/wnn654321/article/details/122442249

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:04:04  更:2022-04-06 16:07:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:59:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码