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