文章分类 - JUC
摘要:JDK8源码 put操作 public V put(K key, V value) { return putVal(key, value, false); //调用putVal } putVal: final V putVal(K key, V value, boolean onlyIfAbsent
阅读全文
摘要:原子性:保证指令不会受到线程上下文切换的影响 可见性:保证指令不会受到CPU缓存的影响 有序性:保证指令不会受到CPU并行优化的影响 可见性问题(缓存) import lombok.extern.slf4j.Slf4j; @Slf4j(topic = "test") public class Tes
阅读全文
摘要:犹豫模式(Balking) 用在一个线程发现另一个线程或本地线程已经做了某一件相同的事,那么本线程就无需再做了,直接结束返回。 package memory; import lombok.extern.slf4j.Slf4j; @Slf4j(topic = "balking") public cla
阅读全文
摘要:固定运行顺序 比如,两个线程,一个打印1,一个打印2。要求必须先打印2再打印1 wait/notify实现(lock/unlock相似) import lombok.extern.slf4j.Slf4j; @Slf4j(topic = "fixedOrder") public class FixOr
阅读全文
摘要:相比synchronized,它具备以下特点: 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量:进入不同的waitSet 与synchronized一样,支持可重入 基本语法 reentrantLock.lock() try{ //临界区 }finally { //释放锁 reentr
阅读全文
摘要:与保护性暂停模式中的GuardObject不同,不需要产生结果和消费结果的线程一一对应。 消费队列可以用来平衡生产和消费的线程资源 生产者只关心产生结果数据,消费者只关心处理结果数据 消息队列是有容量限制的,满时不会再加入数据,空时不会再消耗数据 点击查看代码 import lombok.exter
阅读全文
摘要:Java对象头 调用对象的hashCode 重量级锁会在monitor中记录hashcode 轻量级锁会在锁记录中记录hashcode 调用了对象的hashcode,但偏向锁的对象markword中存储的是线程id,如果调用hashcode会导致偏向锁被撤销 其他线程使用对象 当一个线程使用完偏向锁
阅读全文
摘要:interrupt实现 import lombok.extern.slf4j.Slf4j; @Slf4j public class TwoPhaseTerminationDemo{ public static void main(String[] args) throws InterruptedEx
阅读全文