wat java_并发工具优于wati、notify(69)
现在几乎没有理由在使用wait 和 notify,使用高级工具代替
java.util.concurrent 包并发工具分三类:
Executor 框架
并发集合(concurrent Collection)
同步器(synchronizer)
并发集合
对标准集合接口(List、Map、Queue)封装了高性能的并发实现
为了提高并发性,实现了内部管理同步
除非不得已,请优先使用ConcurrentHashMap
相较于普通 Map ,极大提升了性能
String#intern方法中看到,
这个方法是一个 native 的方法,但注释写的非常明了。
“如果常量池中存在当前字符串, 就会直接返回当前字符串.
如果常量池中没有此字符串, 会将此字符串放入常量池中后, 再返回”。
阻塞操作(BlockingQueue)::
一直阻塞直到被成功执行为止
take 方法删除并返回头元素,队列为空就等待
大部分 ExecutorService 都是用Blockingqueue
同步器(Synchronizer)::
使一个线程能够等待另一个线程,允许他们协调动作
常用同步器有semaphore、CountDownLatch
不常用的有CyclicBarrier、ExChanger
倒计数锁存器(CountDownLatch)::
System.nanoTime()
精度更高
优先使用他,而不是currentTimeMillis
用于计算时间差
使用wait
始终应该使用循环模式来调用wait
永远不要在循环外调用wait
循环会在等待之前和之后调用测试条件
(!!!这个很重要,这就是这里 while 不能换成if的原因)
在多线程的编程实践中,wait()的使用方法如下:
循环里面就一个wait 语句,别的事都不做
synchronized (monitor) {
// 判断条件谓词是否得到满足
while(!locked) {
// 等待唤醒
monitor.wait();
}
// 处理其他的业务逻辑
}
那为什么非要while判断,而不采用if判断呢?如下:
synchronized (monitor) {
// 判断条件谓词是否得到满足
if(!locked) {
// 等待唤醒
monitor.wait();
}
// 处理其他的业务逻辑
}
wat java_并发工具优于wati、notify(69)相关推荐
- 并发工具类:CountDownLatch、CyclicBarrier、Semaphore
在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...
- 并发工具类(一)等待多线程完成的CountDownLatch
简介 CountDownLatch 允许一个或多个线程等待其他线程完成操作. 应用场景 假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个s ...
- 并发工具类(四)线程间的交换数据 Exchanger
前言 JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...
- Python3标准库:asyncio异步I/O、事件循环和并发工具
1. asyncio异步I/O.事件循环和并发工具 asyncio模块提供了使用协程构建并发应用的工具.threading模块通过应用线程实现并发,multiprocessing使用系统进程实现并发, ...
- 【netty】Netty并发工具-Promise
1.概述 转载并且补充:从源码上理解Netty并发工具-Promise 2.前提 最近一直在看Netty相关的内容,也在编写一个轻量级的RPC框架来练手,途中发现了Netty的源码有很多亮点,某些实现 ...
- 第十章_多线程(2)_线程池原子性并发工具类
目录 一.线程池 1 - 线程状态 2 - 线程池 3 - Executors线程池 二.Volatile 三.原子性 四.并发工具类 1 - 并发工具类-Hashtable 2 - 并发工具类-Co ...
- 线程池,Volatile,原子性类AtomicInteger,乐观锁悲观锁,并发工具类Hashtable,ConcurrentHashMap类,Semaphore类
目录 一.线程的状态 二.线程池 1.创建线程池的方式 1.1线程池-Executors默认线程池 1.2线程池-Executors创建指定上限的线程池 1.3线程池-ThreadPoolExec ...
- 学习笔记:Java 并发编程⑥_并发工具_JUC
若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 配套资料: ...
- Java并发(三)并发工具
https://www.cnblogs.com/jinshuai86/p/9226164.html Java编程的逻辑 Java并发编程的艺术 极客时间:Java并发编程实战 并发工具1:同步协作工具 ...
最新文章
- 优雅地处理重复请求(并发请求)
- autorelease什么时候释放_乌龟的天性是什么,饲养中要释放龟的天性吗?
- UOJ#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强
- centos让yum自动选择最快的源
- 【Java代码】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写【去除外层循环:可用于Map对象中的key全部转化为大写或者小写】
- 【Python数据结构】——并查集的实现(查找、合并、集合、实例)
- ubuntu14.04下安装qt4.8.6 +qt creator
- [转]经典的C语言著作,“C语言四书五经”
- java大数据组件HBase
- linux添加qcc,Alpine Linux添加Let’s Encrypt CA证书或者自签CA证书
- 如何利用 AVFoundation 设计一个通用稳定的音视频框架?
- 常见的四种文本自动分词详解及IK Analyze的代码实现
- 工作中你都遇到哪些不要脸的同事?
- 海龟交易法则14_掌控心魔
- python 替换array中的值_Python实现计数排序
- Spring 菜鸟教程 IntrospectorCleanupListener
- AppData文件夹下Local,Locallow和Roaming
- 开源的api文档管理系统
- 2G到5G蜂窝网络的定位技术简介
- 0基础学Java(2)
热门文章
- odoo 中多币种处理(外币处理)
- js如何读取客户端Excel文件
- backtrader指标
- jquery兄弟标签_js jquery获取当前元素的兄弟级 上一个 下一个元素
- 【机器学习】六种算法在人脸补全中的应用比较(K紧邻,线性,决策树,岭回归,套索回归,ElasticNet)
- 【Python】模拟面试技术面试题答
- Scrapy 框架【学习笔记01】
- 执行Hive语句报错:FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user '
- DebugView的使用[通用汇总]
- 剑指offer:二叉树中和为某一值的路径