现在几乎没有理由在使用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)相关推荐

  1. 并发工具类:CountDownLatch、CyclicBarrier、Semaphore

    在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...

  2. 并发工具类(一)等待多线程完成的CountDownLatch

    简介 CountDownLatch 允许一个或多个线程等待其他线程完成操作. 应用场景 假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个s ...

  3. 并发工具类(四)线程间的交换数据 Exchanger

    前言   JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...

  4. Python3标准库:asyncio异步I/O、事件循环和并发工具

    1. asyncio异步I/O.事件循环和并发工具 asyncio模块提供了使用协程构建并发应用的工具.threading模块通过应用线程实现并发,multiprocessing使用系统进程实现并发, ...

  5. 【netty】Netty并发工具-Promise

    1.概述 转载并且补充:从源码上理解Netty并发工具-Promise 2.前提 最近一直在看Netty相关的内容,也在编写一个轻量级的RPC框架来练手,途中发现了Netty的源码有很多亮点,某些实现 ...

  6. 第十章_多线程(2)_线程池原子性并发工具类

    目录 一.线程池 1 - 线程状态 2 - 线程池 3 - Executors线程池 二.Volatile 三.原子性 四.并发工具类 1 - 并发工具类-Hashtable 2 - 并发工具类-Co ...

  7. 线程池,Volatile,原子性类AtomicInteger,乐观锁悲观锁,并发工具类Hashtable,ConcurrentHashMap类,Semaphore类

      目录 一.线程的状态 二.线程池 1.创建线程池的方式 1.1线程池-Executors默认线程池 1.2线程池-Executors创建指定上限的线程池 1.3线程池-ThreadPoolExec ...

  8. 学习笔记:Java 并发编程⑥_并发工具_JUC

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 配套资料: ...

  9. Java并发(三)并发工具

    https://www.cnblogs.com/jinshuai86/p/9226164.html Java编程的逻辑 Java并发编程的艺术 极客时间:Java并发编程实战 并发工具1:同步协作工具 ...

最新文章

  1. 优雅地处理重复请求(并发请求)
  2. autorelease什么时候释放_乌龟的天性是什么,饲养中要释放龟的天性吗?
  3. UOJ#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强
  4. centos让yum自动选择最快的源
  5. 【Java代码】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写【去除外层循环:可用于Map对象中的key全部转化为大写或者小写】
  6. 【Python数据结构】——并查集的实现(查找、合并、集合、实例)
  7. ubuntu14.04下安装qt4.8.6 +qt creator
  8. [转]经典的C语言著作,“C语言四书五经”
  9. java大数据组件HBase
  10. linux添加qcc,Alpine Linux添加Let’s Encrypt CA证书或者自签CA证书
  11. 如何利用 AVFoundation 设计一个通用稳定的音视频框架?
  12. 常见的四种文本自动分词详解及IK Analyze的代码实现
  13. 工作中你都遇到哪些不要脸的同事?
  14. 海龟交易法则14_掌控心魔
  15. python 替换array中的值_Python实现计数排序
  16. Spring 菜鸟教程 IntrospectorCleanupListener
  17. AppData文件夹下Local,Locallow和Roaming
  18. 开源的api文档管理系统
  19. 2G到5G蜂窝网络的定位技术简介
  20. 0基础学Java(2)

热门文章

  1. odoo 中多币种处理(外币处理)
  2. js如何读取客户端Excel文件
  3. backtrader指标
  4. jquery兄弟标签_js jquery获取当前元素的兄弟级 上一个 下一个元素
  5. 【机器学习】六种算法在人脸补全中的应用比较(K紧邻,线性,决策树,岭回归,套索回归,ElasticNet)
  6. 【Python】模拟面试技术面试题答
  7. Scrapy 框架【学习笔记01】
  8. 执行Hive语句报错:FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user '
  9. DebugView的使用[通用汇总]
  10. 剑指offer:二叉树中和为某一值的路径