从源码学习Java并发的锁是怎么维护内部线程队列的 在上一篇文章中,凯哥对同步组件基础框架- AbstractQueuedSynchronizer(AQS)做了大概的介绍.我们知道AQS能够通过内置的FIFO队列来完成资源获取线程的排队工作.那么AQS是怎么来维护这个排队工作的呢?今天我们就来扒一扒AQS源码.从源码中来看看是怎么维护对了的. 本篇是<凯哥(凯哥Java:kagejava)并发编程学习>系列之<Lock系列>教程的第一篇:<Java并发包下锁学习第三篇-从源码…
一直以来,都是看到网上说“ StringBuilder是线程不安全的,但运行效率高:StringBuffer 是线程安全的,但运行效率低”,然后默默记住:一个是线程安全.一个线程不安全,但对内在原因并不了解.这两天终于下定决心看了下源代码,才深刻理解为啥一个线程安全.一个非线程安全. 一名话总结:java.lang.StringBuilder 与 java.lang.StringBuffer 同是继承于 java.lang.AbstractStringBuilder,具体在功能实现大多在 Abs…
java.lang.String是使用频率非常高的类.要想更好的使用java.lang.String类,了解其源代码实现是非常有必要的.由java.lang.String,自然联想到java.lang.StringBuffer和java.lang.StringBuilder,下篇文章再来研究java.lang.StringBuffer和java.lang.StringBuilder. 重要属性 java.lang.String对象中字符串主要是以字符数组的形式存储.当调用对象方法获取字符串长度时…
目录 ThreadLocal是啥?用来干啥? ThreadLocal的简单使用 ThreadLocal的实现思路? ThreadLocal常见方法源码分析 ThreadLocal.set(T value) ThreadLocal.get() ThreadLocal.remove() ThreadLocalMap源码分析 ThreadLocalMap结构分析 ThreadLocalMap的Hash算法 ThreadLocalMap.set() ThreadLocalMap.resize()扩容 T…
目录 基本用法介绍 继承体系 构造方法 state状态表示 获取锁 void lock()方法 NonfairSync FairSync 公平与非公平策略的差异 void lockInterruptibly() boolean tryLock()方法 boolean tryLock(long timeout, TimeUnit unit) 释放锁 void unlock()方法 Condition实现生产者消费者 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueu…
目录 非阻塞并发队列ConcurrentLinkedQueue概述 结构组成 基本不变式 head的不变式与可变式 tail的不变式与可变式 offer操作 源码解析 图解offer操作 JDK1.6 hops设计意图 poll操作 源码解析 图解poll操作 总结 参考阅读 非阻塞并发队列ConcurrentLinkedQueue概述 我们之前花了很多时间了解学习BlockingQueue阻塞队列接口下的各种实现,也大概对阻塞队列的实现机制有了一定的了解:阻塞 + 队列嘛. 而且其中绝大部分是…
准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.java.util.concurrent.atomic,正如它的英文意思一样,是一个线程安全.原子操作相关的包 另一个专门为线程安全设计的Java包,包含多个原子操作类.这个包里面提供了一组原子变量类.其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程…
目录 本篇学习目标 CLH队列的结构 资源获取 入队Node addWaiter(Node mode) 不断尝试Node enq(final Node node) boolean acquireQueued(Node, int) 出队void setHead(Node) boolean shouldParkAfterFailedAcquire(Node,Node) boolean parkAndCheckInterrupt() void cancelAcquire(node) 释放资源 bool…
目录 Java并发包源码学习系列:AQS共享模式获取与释放资源 独占式获取资源 void acquire(int arg) boolean acquireQueued(Node, int) 独占式释放资源 boolean release(int arg) void unparkSuccessor(Node node) 共享式获取资源 void acquireShared(int arg) void doAcquireShared(int arg) void setHeadAndPropagate…
目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writerShouldBlock() void lockInterruptibly() boolean tryLock() boolean tryLock(long timeout,TimeUnit unit) 写锁的释放 void unlock() 读锁的获取 void lock() boolean r…