JUC_教程版
_枸杞子_
软件工程专业学生
展开
-
JUC-001-volatile与内存可见性
JUC简介在Java 5.0 提供了java.util.concurrent(简称JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步IO 和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的Collection 实现等。内存可见性(Memory Visibility)内存可见性(Memory Visibilit原创 2017-11-22 20:31:23 · 614 阅读 · 0 评论 -
JUC-009-Condition控制线程通信
概述Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中的不同。在 Condition 对象中,与 wait、notify 和 notifyAl原创 2018-02-07 14:34:41 · 304 阅读 · 0 评论 -
JUC-008-案例-虚假唤醒
概述被唤醒之后,一些数据已经发生了变化,需要对数据进行重新判断,否则就有可能出现虚假唤醒。 当有多个消费者和生产者时,一次会有多个消费者被唤醒,它们同时执行操作,这也会出现虚假唤醒。应该保证所有的wait操作都在while循环当中。测试代码LockTest.javapackage juc.lock;/* * 虚假唤醒的解决: * wait要始终保证在while循环当中。 */publi原创 2018-02-07 14:34:03 · 540 阅读 · 0 评论 -
JUC-007-同步锁Lock
解决多线程安全问题的方法同步代码块同步方法同步锁显示锁 Lock在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁的方法,而是当内置锁不适用时,作为一种可选择的高级功能。ReentrantLock 实现了 Lock 接口,并提供了与synch原创 2018-01-30 12:09:27 · 2665 阅读 · 0 评论 -
JUC-006-创建线程的方式三-实现Callable接口
概述前面已经学习过两种创建线程的方式了:实现Runnable接口,实现其中run方法。继承Thread,重写其中run方法。 今天我们来认识第三种创建线程的方式,它具有返回值和可抛出异常。Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程原创 2018-01-24 12:59:42 · 459 阅读 · 0 评论 -
JUC-005-CountDownLatch闭锁
概述Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行: 确保某个计算在其需要的所有资源都被初始化之后才继续执行;确保某个原创 2018-01-24 12:58:49 · 8727 阅读 · 0 评论 -
JUC-004-同步容器类ConcurrentHashMap
Java 5.0 在java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对于多线程的操作,介于HashMap 与Hashtable 之间。内部采用“锁分段”机制替代Hashtable 的独占锁。进而提高性能。此包还提供了设计用于多线程上下文中的Collection 实现:原创 2018-01-24 12:58:03 · 659 阅读 · 0 评论 -
JUC-003-模拟CAS算法
测试代码TestCAS.javapackage juc.cas;import java.util.Random;public class TestCAS { public static void main(String[] args) { final CompareAndSwap cas = new CompareAndSwap(); for (int i =原创 2018-01-24 12:57:06 · 383 阅读 · 0 评论 -
JUC-002-JUC原子变量与CAS算法
i++i++的执行步骤分析:“读-改-写”。 读:先把i的值交给一个临时变量。 改:i = i + 1; 写:返回temp值。 因为i++不是一个单一的操作,它由三步构成,所以i++不是一个原子操作。 CAS算法保证原子性CAS (Compare-And-Swap) 是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问。 CAS 是一种无锁原创 2018-01-06 13:56:17 · 516 阅读 · 0 评论 -
JUC-010-线程按序交替
需求编写一个程序,开启 3 个线程,这三个线程的 ID 分别为A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。 如:ABCABCABC…… 依次递归。 测试代码package juc.swap;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lo原创 2018-02-28 20:58:43 · 335 阅读 · 0 评论