并发相关
文章平均质量分 61
龙哥_子戈
从事java、android相关方面的开发
展开
-
lock锁的condition原理
Condition维护了一个AQS单向链表,当调用await()时将当前线程加入到链表中,然后调用signal()会从链表头部拿出一个节点放到ReenTranLock维护的双向链表中,去抢锁,如果抢锁成功就执行,如果调用signalAll就是把所有的Condition链表节点都加入到ReenTranLock维护的双向链表中去抢锁。在并发编程中,每个Java对象都存在一组监视器方法,如wait()、notify()以及notifyAll()方法,通过这些方法,我们可以实现线程间通信与协作(也称为等待唤醒机原创 2021-03-15 17:24:05 · 803 阅读 · 0 评论 -
synchronized和lock的区别
synchronized实现原理见:https://mp.csdn.net/editor/html/114829524区别如下: 来源: lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现; 异常是否释放锁: synchronized在发生异常时候会自动释放占有的锁,因此不会出现死锁;而lock发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。(所以最好将同步代码块用try catch包原创 2021-03-15 16:33:21 · 121 阅读 · 0 评论 -
怎么实现所有线程在等待某个事件的发生才会去执行
一、CountDownLatch用来解决线程之间通信的。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行任务。(一般是主线程等待子线程执行完毕)CounDownLatch的不足是设置的计时器的数值只能在构造方法中初始化一次。package co原创 2021-03-15 15:54:24 · 639 阅读 · 0 评论