
JUC
Insane'
这个作者很懒,什么都没留下…
展开
-
尚硅谷JUC#线程池
线程池介绍第四种获取线程的方法:线程池。线程池提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。通常使用 Executors 工厂方法配置。线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。线程池的体系结构工具类 : Executors为了便于跨大量上下文使用,此类提供了很多可调整的参数和扩展钩子 (hook)。但是,强烈建议程序原创 2020-09-20 14:27:24 · 160 阅读 · 0 评论 -
尚硅谷JUC#线程8锁
判断打印的 “one” or “two” ?两个普通同步方法,两个线程,标准打印, 打印结果?新增 Thread.sleep() 给 getOne(),打印结果?新增普通方法 getThree() , 打印结果?两个普通同步方法,两个 Number 对象,打印结果?修改 getOne() 为静态同步方法,打印结果?修改两个方法均为静态同步方法,一个 Number 对象,打印结果?一个静态同步方法,一个非静态同步方法,两个 Number 对象,打印结果?两个静态同步方法,两个 Number原创 2020-09-15 21:03:53 · 166 阅读 · 0 评论 -
尚硅谷JUC#ReadWriteLock 读写锁
ReadWriteLock 维护了一对相关的锁,一个用于只读操作, 另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。对于读取操作占多数的数据结构。 ReadWriteLock 能提供比独占锁更高的并发性。而对于只读的数据结构,其中包含的不变性 可以完全不需要考虑加锁操作。写写/读写 需要“互斥”读读 不需要互斥public class Tes原创 2020-09-06 15:53:36 · 190 阅读 · 0 评论 -
尚硅谷JUC#线程按序交替
要求:编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印,要 求输出的结果必须按顺序显示。 如:ABCABCABC…… 或ABBCCCABBCCC…依次递归public class TestABCAlternate { public static void main(String[] args) { AlternateDemo ad = new AlternateDemo(); new Thread(new Runnable()原创 2020-09-06 15:27:40 · 158 阅读 · 0 评论 -
尚硅谷JUC#Condition 控制线程通信
Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用 法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中的不同。在 Condition 对象中,与 wait、notify 和 notifyAll 方法对应的分别是 await、signal 和 signalAll。Condition 实例实质上被绑定到一原创 2020-09-05 16:21:01 · 174 阅读 · 0 评论 -
尚硅谷JUC # CountDownLatch(闭锁)
概念CountDownLatch(闭锁)——一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。CountDown(倒数)latch(锁)用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。== 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。==闭原创 2020-09-04 16:31:57 · 130 阅读 · 0 评论 -
尚硅谷JUC # Lock 同步锁
在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制但并不是一种替代内置锁的方法,而是当内 置锁不适用时,作为一种可选择的高级功能。ReentrantLock 实现了 Lock 接口,并提供了与 synchronized 相同的互斥性和内存可见性。但相较于 synchronized 提供了更高的处理锁的灵活性。解决多线程安全问题的三种方式jdk 1.5 前:synchronized:隐式锁1.同原创 2020-09-04 16:27:01 · 176 阅读 · 0 评论 -
尚硅谷JUC # 实现 Callable 接口
Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口。Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁。创建线程的四种方式无返回:1、实现Runnable接口,重写run();2、继承Thread类,重写run();有返回:3、实现Callable接口,重写call(),利用FutureTask包装Callable,并作为task传入Thread构造函数;4、利用线程池;Callable原创 2020-09-04 15:12:53 · 135 阅读 · 0 评论 -
尚硅谷#ConcurrentHashMap 锁分段机制
ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对与多线程的操作,介于 HashMap 与 Hashtable 之间。内部采用==“锁分段”==机制替代 Hashtable 的独占锁。进而提高性能。锁粒度减小锁粒度是指缩小锁定对象的范围,从而减小锁冲突的可能性,从而提高系统的并发能力。减小锁粒度是一种削弱多线程锁竞争的有效手段,这种技术典型的应用是 ConcurrentHashMap(高性能的HashMap)类的实现。对于 HashMap 而言,最重要..原创 2020-08-24 15:21:33 · 435 阅读 · 1 评论 -
尚硅谷JUC#原子变量与CAS算法
1、原子变量JDK1.5后,java.util.concurrent.atomic 包下提供了一些原子操作的常用类: 类似包装类核心方法:boolean compareAndSet(expectedValue, updateValue)1.1 i++的原子性问题i++的操作实际上分为三个步骤:读-改-写int temp = i;i = i +1;i = temp;public class CASTest { public static void main(String[] args)原创 2020-08-23 15:47:22 · 262 阅读 · 0 评论 -
volatile 关键字
1、Java JUC简介在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用 的实用工具类,用于定义类似于线程的自定义子 系统,包括线程池、异步 IO 和轻量级任务框架。 提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的 Collection 实现等。2、volatile 关键字-内存可见性2.1内存可见性Java 内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存,并且线程只能访原创 2020-08-03 08:52:54 · 120 阅读 · 0 评论