随笔分类 -  多线程

摘要:代码附上了力扣没显示出来的测试 按序打印 class Foo { private CountDownLatch latch = new CountDownLatch(1); private CountDownLatch sendcondLatch = new CountDownLatch(1); p 阅读全文
posted @ 2021-06-07 22:50 Code&Fight 阅读(79) 评论(0) 推荐(0) 编辑
摘要:CountDownLatch 通常情况下,countDown如下调用 看一下countDown方法: AQS中releaseShared方法如下: CountDownLatch中tryReleaseShared方法如下: 来看doReleaseShared()方法: 不过尴尬的是,CountDown 阅读全文
posted @ 2019-08-08 22:46 Code&Fight 阅读(354) 评论(0) 推荐(0) 编辑
摘要:AQS 内部类Node 等待队列是CLH有锁队列的变体。 waitStatus的几种状态: 以下面的测试程序为例,简单介绍一下同步队列的变化: java @Test public void test() { CountDownLatch countDownLatch = new CountDownL 阅读全文
posted @ 2019-08-02 20:32 Code&Fight 阅读(187) 评论(0) 推荐(0) 编辑
摘要:ThreadPoolExecutor 1. ctl(control state) 线程池控制状态,包含两个概念字段:workerCount(线程有效数量)和runState(表示是否在运行、关闭等状态) workerCount限制到2^29 1 (5亿左右) runstate有如下几个状态: RUN 阅读全文
posted @ 2019-08-02 20:31 Code&Fight 阅读(230) 评论(0) 推荐(0) 编辑
摘要:一些容易混淆的知识点 1. sleep vs wait sleep是Thread,wait是Object方法 wait和notify只能在同步代码块中调用 wait释放锁资源,sleep不释放锁资源 唤醒条件:wait通过notify或者notifyAll,sleep超时或者调用interrupt方 阅读全文
posted @ 2019-08-02 20:30 Code&Fight 阅读(162) 评论(0) 推荐(0) 编辑
摘要:创建线程有几种方式: 1. 自定义类继承Thread(如下面的AThread),然后使用Thread.start方法启动线程 2. 创建类,实现Runnable,通过Thread的构造函数来启动,有时也用于ThreadPoolExecutor线程池的一些execute方法中 3. Callable, 阅读全文
posted @ 2019-07-14 00:05 Code&Fight 阅读(182) 评论(0) 推荐(0) 编辑
摘要:参考https://github.com/crossoverJie/JCSprout/blob/master/src/main/java/com/crossoverjie/actual/TwoThread.java从线程方面实现交替打印。 java public class Test { volat 阅读全文
posted @ 2019-02-24 23:00 Code&Fight 阅读(640) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示