- 博客(7)
- 收藏
- 关注
原创 NIO与BIO
NIO原理 三大核心关系图说明1 每个Channel都会对应一个Buffer2 Selector 对应一个线程,一个线程对应多个/channel(连接)3 该图反应了有三个channel注册到该selector程序4 程序切换到哪个channel是由事件决定的,Event就是一个重要的概念5 Selector会根据不同的事件,在各个通道上切换6 Buffer就是一个内存块,底层...
2020-04-22 13:55:24
149
原创 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
328
原创 死锁 与 jstack命令排错方法
什么是死锁死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那他们将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源二进入死锁示例代码package com.Interview.study.thread;import java.util.concurrent.TimeUnit;...
2020-04-20 19:09:57
204
原创 阻塞队列
ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行排序LinkedBlockingQueue一个基于链表结构的阻塞队列,此队列按FIFO排序元素,吞吐量通常高于ArrayBlockingQueueSynchronousQueue一个不储存元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状...
2020-04-20 14:28:21
200
原创 CountDownLatch,CyclicBarrier,Semaphore
概念解释CountDownLatch让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程会被阻塞。其它线程调用countDown方法会将计数器减一(调用countDown方法的线程不会被阻塞)当计数器的值变为0的时候,因调用await方法被阻塞的线程会被唤醒,继续执行。CyclicBarrierSe...
2020-04-17 19:53:13
117
原创 读写锁(ReadWriteLock)
为什么要读写锁 1 多个线程同时读取一个资源类没有任何问题,所以为了满足并发量,读取共享资源应该可以同时进行 2 但是有一个线程想去写共享资源,就不应该再有其他线程可以对该资源进行读或写 3 **ReentrantReadWriteLock** 读是共享锁 写是独占锁 4 不用Lock的原因是 他只能单线程 现在要求读的时候是多线程去读,写的时候只能由一个线程去读,Lock就不...
2020-04-17 16:26:11
122
原创 自旋锁(Spinlock)
自旋锁释义是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,优点:减少线程上下文切换的消耗,缺点:循环会消耗CPU代码Demopackage com.Interview.study.thread;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReferen...
2020-04-17 14:53:47
178
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人