并发编程 18—— 显式的Conditon 对象

并发编程 01—— ConcurrentHashMap

并发编程 02—— 阻塞队列和生产者-消费者模式

并发编程 03—— 闭锁CountDownLatch 与 栅栏CyclicBarrier

并发编程 04—— Callable和Future

并发编程 05—— CompletionService : Executor 和 BlockingQueue

并发编程 06—— 任务取消

并发编程 07—— 任务取消 之 中断

并发编程 08—— 任务取消 之 停止基于线程的服务

并发编程 09—— 任务取消 之 关闭 ExecutorService

并发编程 10—— 任务取消 之 “毒丸”对象

并发编程 11—— 任务取消与关闭 之 shutdownNow 的局限性

并发编程 12—— 线程池的使用 之 配置ThreadPoolExecutor 和 饱和策略

并发编程 13—— 线程池 之 整体架构

并发编程 14—— 线程池 之 原理一

并发编程 15—— 线程池 之 原理二

并发编程 16—— Lock

并发编程 17—— 使用内置条件队列实现简单的有界缓存

概述

第1部分  定义

第2部分 实例

第1 部分 定义

Condition 是一种广义的内置条件队列,接口如下:

public interface Condition {
    // 造成当前线程在接到信号或被中断之前一直处于等待状态。
    void await();
    // 造成当前线程在接到信号、被中断或到达指定等待时间之前一直处于等待状态。
    boolean await(long time, TimeUnit unit);
    // 造成当前线程在接到信号、被中断或到达指定等待时间之前一直处于等待状态。
    long awaitNanos(long nanosTimeout);
    // 造成当前线程在接到信号之前一直处于等待状态。
    void awaitUninterruptibly();
    // 造成当前线程在接到信号、被中断或到达指定最后期限之前一直处于等待状态。
    boolean awaitUntil(Date deadline);
    void signal();    // 唤醒一个等待线程
    void signalAll(); // 唤醒所有等待线程
}
时间: 2024-10-10 05:12:44

并发编程 18—— 显式的Conditon 对象的相关文章

并发编程—4显式锁 Lock

目录 4.显式锁 Lock 4.1 概念 内置锁 vs 显示锁 可重入锁 vs 不可重入锁 公平锁 vs 非公平锁 读锁 vs 写锁 4.2 ReentrantLock源码解读 4.显式锁 Lock 4.1 概念 内置锁 vs 显示锁 synchronize是java语言层面实现的锁,称为内置锁.使用方便代码简洁,而且在jdk新版本优化后,性能也得到了很大的提高.synchronize是一个可重入锁.而Lock是jdk提供开发者是用的一个显式锁.通过lock()和unlock()方法加锁和释放锁

像素的存储方法、显式创建Mat对象的七种方法

一.像素的存储方法: 存储像素值需要指定颜色空间和数据类型.其中,颜色空间是指针对一个给定的颜色,如何组合颜色元素以对其编码. 最简单的颜色空间要属灰度级空间,只处理黑色和白色,对他们进行组合便可以产生不同程度的灰色. 对于彩色方式则有更多种类的颜色空间,但不论哪种方式都是把颜色分成三个或者四个基元素,通过组合基元素可以产 生所有的颜色.RGB颜色空间是最常见的一种颜色空间,这归功于它也是人眼内部构成颜色的方式.它的基色是红色.绿色 和蓝色,有时为了表明透明颜色也会加入第四个元素alpha. 颜

《Java并发编程实战》第三章 对象的共享 读书笔记

一.可见性 什么是可见性? Java线程安全须要防止某个线程正在使用对象状态而还有一个线程在同一时候改动该状态,并且须要确保当一个线程改动了对象的状态后,其它线程能够看到发生的状态变化. 后者就是可见性的描写叙述即多线程能够实时获取其它线程改动后的状态. *** 待补充   两个工人同一时候记录生产产品总数问题 1. 失效数据 可见性出现故障就是其它线程没有获取到改动后的状态,更直观的描写叙述就是其它线程获取到的数据是失效数据. 2. 非原子64位操作 3. 加锁与可见性 比如在一个变量的读取与

《Java并发编程实战》第四章 对象的组合 读书笔记

一.设计线程安全的类 在设计线程安全类的过程中,须要包括下面三个基本要素: . 找出构成对象状态的全部变量. . 找出约束状态变量的不变性条件. . 建立对象状态的并发訪问管理策略. 分析对象的状态,首先从对象的域開始. 变量按作用域划分: . 全局变量 . 局部变量 . 方法行參 . 异常处理參数 1. 收集同步需求 假设不了解对象的不变性条件与后验条件,那么就不能确保线程安全性.要满足在状态变量的有效值或状态转换上的各种约束条件.就须要借助原子性和封装性. 说的更简略些是Java线程安全都是

JAVA并发编程实战---第三章:对象的共享(2)

线程封闭 如果仅仅在单线程内访问数据,就不需要同步,这种技术被称为线程封闭,它是实现线程安全性的最简单的方式之一.当某个对象封闭在一个线程中时,这种方法将自动实现线程安全性,即使被封闭的对象本生不是线程安全的. 实现好的并发是一件困难的事情,所以很多时候我们都想躲避并发.避免并发最简单的方法就是线程封闭.什么是线程封闭呢? 就是把对象封装到一个线程里,只有这一个线程能看到此对象.那么这个对象就算不是线程安全的也不会出现任何安全问题.实现线程封闭有哪些方法呢? 1:ad-hoc线程封闭 这是完全靠

Java并发编程实战(chapter_2)(对象发布、不变性、设计线程安全类)

又是三星期的生活.感觉自从有了这个分享之后,会无形多了一份动力,逼着自己不能落后,必须要去不停的学习,这其实是我想要的,各位少年团中的成员也都是有共鸣的,在此很感动,省去一万字.....这一次会总结对象的安全发布.不变性,这几点,在我们工程实践中,同样也是非常具有参考与思考价值的基础知识点.看书枯燥,理解生涩,可是当你看过,理解一点,再平时业务代码中就会比别人多思考一分,就会比别人在更"恶劣"的网络环境中,更稳定一分.这几天想起<三傻>中,那句很经典的话:追求卓越,成功将会

Java并发编程学习笔记(二)——对象的共享

主要概念:可见性.重排序.失效数据.最低安全性.发布.逸出.线程封闭(Ad-hoc.栈封闭.ThreadLocal类).不变性.Final域.事实不可变对象. 1.在没有同步的情况下,编译器.处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整.在缺乏足够同步的多线程程序中,要想对内存操作的执行顺序进行判断,几乎无法得出正确的结论. 2.在多线程中使用共享且可变的long和double等类型的变量是不安全的,除非用关键字volatile来声明它们,或者用锁来保护他们. 3.加锁的含义不

并发编程(5):锁对象、同步代码块

1.同步代码块 使用synchronized声明的方法在某些情况下是有弊端的,比如A线程调用同步的方法执行一个很长时间的任务,那么B线程就必须等待比较长的时间才能执行,这样的情况下可以使用synchronized代码块去优化代码执行时间,也就是通常所说的减小锁的粒度. 代码 public class Demo7 { public void doLongTimeTask(){ try { System.out.println("当前线程开始:" + Thread.currentThrea

JAVA并发编程实战---第三章:对象的共享

在没有同步的情况下,编译器.处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整.在缺乏足够同步的多线程程序中,要对内存操作的执行顺序进行判断几乎无法得到正确的结果. 非原子的64位操作 当线程在没有同步的情况下读取变量时,可能会读到一个失效值,但至少这个值是由之前的某个线程设置,而不是一个随机值.这种安全性保证也被称为最低安全性. Java内存模型要求:变量的读取操作和写入操作都必须是原子操作,但对于非Volatile类型的long和Double变量,JVM允许将64的读操作或写操作