
多线程
文章平均质量分 62
子♂衿
人生的意义又是什么呢?
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从ReentrantLock的角度来看AQS原理
ReentrantLockReentrantLock作为java api层面的加锁方式,其性能比synchronized更好(synchronized进行优化后性能差不太多),灵活性更强ReentrantLocksynchronized可重入可重入可尝试加锁不能尝试加锁加锁时支持打断加锁时不支持打断加锁时可设置超时时间不能设置超时时间关联多个条件队列关联一个条件队列需要手动释放锁自动释放锁公平&非公平非公平原创 2021-03-20 18:29:32 · 10686 阅读 · 3 评论 -
经过测试synchronized并不会立即释放锁
今天在测试进入偏向锁之后调用锁对象的hashCode()会不会升级为重量级锁,结果无意中测试出来了,synchronized进入重量级锁之后,即使临界代码执行完了也并不会立即释放锁先来看看对象头各个bit的含义上代码public class ObjectHeader { public static void main(String[] args) throws InterruptedException { Object monitor = new Object();原创 2021-03-07 16:21:10 · 11258 阅读 · 2 评论 -
糟了,线上程序没反应了,是死锁了吗?该怎么去排查?
作为程序猿难免遇不到线程死锁,但是遇到死锁的时候也不要慌,我们冷静下来仔细排查有时候可能会遇到调用接口的时候突然没反应了,数据库,或者其他微服务也都一切正常,这个时候可能就是出现死锁了,使用 jstack 这个工具可以帮助我们排查死锁使用 jps 找到你出现死锁的那个程序的 pid然后使用 jstack 19064 即可看到线程的堆栈信息这里有过jstack使用经验的应该已经看到哪里...原创 2020-03-13 10:14:57 · 10626 阅读 · 0 评论 -
案例,实战演示线上定位哪个线程占CPU执行时间最多
首先来查看一个 top命令给出的信息图中有一个java进程占用了CPU执行时间的百分之99,我们到线上也难免会出现这种问题,那么出现这种问题我们该怎么排查呢?首先我们已经知道了占用CPU执行时间的进程ID,即16578那么我们可以使用 top H -p pid 和 ps H -eo pid,tid, %cpu pid 这两个命令中任意一个命令来获取这个进程中是哪个线程占用了执行时间,这里我...原创 2020-03-13 09:50:26 · 10426 阅读 · 0 评论 -
各种锁的概念
我们学习多线程相关知识的时候都会涉及到各种锁,自旋锁、乐观锁、悲观锁、可重入锁、互斥锁、排它锁、独占锁、 共享锁。。等等其实很多锁的概念都是来源与数据库,java中的锁也有这些特性,因此我们在学习多线程的时候就会接触这些概念synchronized我们先从这个关键字开始讲,相信接触过多线程的人都知道这个关键字是用来干嘛的,它保证了我们一个代码块的原子性,当一个线程想要执行synchroni...原创 2020-01-02 10:50:59 · 10562 阅读 · 0 评论 -
InheritableThreadLocal的使用与原理
经过 ThreadLocal实现原理 这一篇的分析。我们了解了ThreadLocal的原理,也知道我们可以使用ThreadLocal来保存线程的局部变量,但是我们也知道,一个线程保存的值,另外一个线程也是访问不了的,那么问题也随之而来了,比如我们有时候想要在子线程中访问父线程中ThreadLoca中的值,那么该怎么办呢?InheritableThreadLocal使用InheritableTh...原创 2019-12-31 16:22:50 · 10629 阅读 · 1 评论 -
ThreadLocal实现原理详细分析
线程安全问题我们都知道程序中如果有多个线程对一个共享资源进行了‘写’操作,那么就会出现线程安全问题问题怎么产生的线程安全问题是怎么产生的呢?是因为对共享资源的操作不是原子性的,什么是原子性?即:一组操作要么都成功,要么都失败,不存在只成功一部分注:以下对ThreadLocalMap对象简称为map,实际ThreadLocalMap和Map接口并没有关系,感兴趣的可以了解一下Thr...原创 2019-12-31 11:41:50 · 10499 阅读 · 0 评论