随笔分类 -  JUC

摘要:Condition控制线程通信 对象 等待 唤醒 唤醒所有 Object wait() notify() notifyAll() Condition await() signal() signalAll() Lock同步锁的线程通信需要通过Condition实现 通过Lock+Condition实现 阅读全文
posted @ 2024-02-29 19:30 刘二水 阅读(12) 评论(0) 推荐(0) 编辑
摘要:Lock同步锁 用于解决多线程安全问题的方式: 同步代码块,synchronized实现,隐式锁 同步方法,synchronized实现,隐式锁 同步锁Lock:jdk 1.5以后 注:是一个显示锁,需要通过lock()方法上锁,必须通过unlock()方法进行释放锁(一定要将unlock()放到f 阅读全文
posted @ 2024-02-29 19:30 刘二水 阅读(17) 评论(0) 推荐(0) 编辑
摘要:实现Callable接口 创建执行线程的第三种方式,共四种 比较Runnable和Callable: Callable方法可以有返回值,并且可以抛出异常。 由于Callable的方法有返回值,需要FutureTask的支持,用于接收运算结果。FutureTask 是 Future接口的实现类。 使用 阅读全文
posted @ 2024-02-29 19:30 刘二水 阅读(15) 评论(0) 推荐(0) 编辑
摘要:CountDownLatch闭锁 闭锁:延迟当前线程的进度,直到其他线程都执行完成当前线程才继续执行。 示例:计算多线程操作耗费时间 以下操作时无法正常计算多线程操作耗时的 package com.atguigu.juc; public class TestCountDownLatch { publ 阅读全文
posted @ 2024-02-29 19:30 刘二水 阅读(9) 评论(0) 推荐(0) 编辑
摘要:ConcurrentHashMap锁分段机制 1. 关于HashMap和HashTable HashMap:线程不安全 HashTable: 效率低:操作时锁整个表 复合操作会带来安全问题 // table.contains()和table.put()分别都是加了锁的,但是像下述复合操作,一个线程判 阅读全文
posted @ 2024-02-29 19:30 刘二水 阅读(144) 评论(0) 推荐(0) 编辑
摘要:原子变量-CAS算法 1. i++的原子性问题 i++的计算原理:读 - 改 - 写 int temp = i; i = i + 1; 将i++赋给其他变量的时候会将temp的值赋给其他变量,比如: int i = 10; i = i++; // 这里i的值就是10,i++的值实际上就是临时变量te 阅读全文
posted @ 2024-02-29 19:30 刘二水 阅读(6) 评论(0) 推荐(0) 编辑
摘要:volatile关键字-内存可见性 引出内存可见性问题的示例: package com.atguigu.juc; public class TestVolatile { public static void main(String[] args) { // 线程threadDemo修改共享变量的值 阅读全文
posted @ 2024-02-29 19:30 刘二水 阅读(8) 评论(0) 推荐(0) 编辑
摘要:简介 JDK 1.5以后提供 多线程: ​ 1.5以前 synchronized、volatile ​ 1.5以后 JUC 阅读全文
posted @ 2024-02-29 19:30 刘二水 阅读(107) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示