摘要:
AQS实现原理 ReentrantLock和Synchronization一样是可重入锁,Synchronization是sun公司开发,而ReentrantLock是一个叫Doug Lea的人写出来的。它控制锁的状态是通过AQS(抽象队列同步器)来实现的,说白了就是 等待队列 + CAS。 (1) 阅读全文
摘要:
初始化 创建的时候,实际就是指定了队列大小 capacity,然后队列node其实就是个单向列表结构,item 是当前元素,next 是下一个元素的引用。默认head指针和last指针都是指向这个空节点。ps: 是不是有点责任链模式的感觉呢。 put put 从队列尾部插入节点 1. 首先也是获取到 阅读全文
摘要:
ConcurrentLinkedQueue 是一个基于链表的无界线程安全队列,非阻塞实现方式,先进先出,适合高并发的场景。可以看出其底层就是一个单向链表结构。 offer offer从队尾插入元素 1. newNode 首先是将当前线程封装成一个node节点2. 进入for死循环,t为tail节点, 阅读全文
摘要:
Semaphore,等待指定数量的线程完成任务即可 public class A { private static SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 同步关键类,构造方法传入的数字是多少,则同一 阅读全文
摘要:
案例 public static void main(String[] args) throws Exception{ Map<String,Object> map = new A().test(); for(Map.Entry<String, Object> e : map.entrySet()) 阅读全文
摘要:
CountDownLatch 计数器设置默认的 count ,然后调用 await() 的线程会一直被挂起,直到 count 个线程都执行 countDown() 之后,被挂起的线程才会唤醒,接着走下面的逻辑。 public static void main(String[] args) throw 阅读全文
摘要:
Object 中可以通过 wait() 、notify() 来休眠唤醒。Condition 中同样可以实现这样的效果。 static ReentrantLock lock = new ReentrantLock(); static Condition condition = lock.newCond 阅读全文
摘要:
多线程访问同一个共享变量的时候容易出现并发问题,很多时候我们是通过加锁解决的。但是,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。那么这就要提到 ThreadLocal 了。比如很多公司做单点登录会用到 ThreadLocal ,通过拦截 阅读全文
摘要:
ReentrantLock 中还有 ReentrantReadWriteLock 这么一个变种,读读不互斥,读写互斥,写写互斥。 写锁 一开始,就是 tryAcquire 获取锁,如果获取失败就返回 false ,那就走 addWaiter 将请求入队,然后 acquireQueued 挂起线程。和 阅读全文
摘要:
什么是Rancher 是一个开源的企业级PaaS容器管理平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。可以使用任何公有云或者私有云的Linux主机资源。Linux主机可以是虚拟机,也可以是物理机Rancher仅需要主机有CPU,内存,本 阅读全文