学习笔录
文章平均质量分 79
凌晨三点半Async
学习使我快乐
展开
-
NIO与BIO
NIO原理 三大核心关系图说明1 每个Channel都会对应一个Buffer2 Selector 对应一个线程,一个线程对应多个/channel(连接)3 该图反应了有三个channel注册到该selector程序4 程序切换到哪个channel是由事件决定的,Event就是一个重要的概念5 Selector会根据不同的事件,在各个通道上切换6 Buffer就是一个内存块,底层...原创 2020-04-22 13:55:24 · 159 阅读 · 0 评论 -
Synchronized和Lock对比
原始构成1 Synchronized是关键字 属于JVM层面monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象只有在同步代码块或方法中才能调wait/notify等方法)2 Lock 是具体类(java.util.concurrent.locks.lock)是api层面的锁使用方法1 Synchronized不...原创 2020-04-20 20:32:55 · 337 阅读 · 0 评论 -
死锁 与 jstack命令排错方法
什么是死锁死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那他们将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源二进入死锁示例代码package com.Interview.study.thread;import java.util.concurrent.TimeUnit;...原创 2020-04-20 19:09:57 · 215 阅读 · 0 评论 -
阻塞队列
ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行排序LinkedBlockingQueue一个基于链表结构的阻塞队列,此队列按FIFO排序元素,吞吐量通常高于ArrayBlockingQueueSynchronousQueue一个不储存元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状...原创 2020-04-20 14:28:21 · 229 阅读 · 0 评论 -
CountDownLatch,CyclicBarrier,Semaphore
概念解释CountDownLatch让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程会被阻塞。其它线程调用countDown方法会将计数器减一(调用countDown方法的线程不会被阻塞)当计数器的值变为0的时候,因调用await方法被阻塞的线程会被唤醒,继续执行。CyclicBarrierSe...原创 2020-04-17 19:53:13 · 129 阅读 · 0 评论 -
读写锁(ReadWriteLock)
为什么要读写锁 1 多个线程同时读取一个资源类没有任何问题,所以为了满足并发量,读取共享资源应该可以同时进行 2 但是有一个线程想去写共享资源,就不应该再有其他线程可以对该资源进行读或写 3 **ReentrantReadWriteLock** 读是共享锁 写是独占锁 4 不用Lock的原因是 他只能单线程 现在要求读的时候是多线程去读,写的时候只能由一个线程去读,Lock就不...原创 2020-04-17 16:26:11 · 147 阅读 · 0 评论 -
自旋锁(Spinlock)
自旋锁释义是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,优点:减少线程上下文切换的消耗,缺点:循环会消耗CPU代码Demopackage com.Interview.study.thread;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReferen...原创 2020-04-17 14:53:47 · 205 阅读 · 0 评论