深入Java并发包(2) – Java说要有并发包, 于是有了AQS

This entry is part 2 of 4 in the series 深入Java并发包

AQS提供了框架,提供了许多可以选择性实现的方法。将他们组合起来,便成了各种我们常用的锁/队列/同步器。本文以ReentrantLock和CountDownLatch为切入口扒一扒源码, 讲一讲思路。 AQS为何物? AQS提供的并发控制框架, 本质上就是将多个线程对竞争对象的操作变成有序的队列. 这从类名也可以看出来AbstractQueuedSynchronizer, A (Abstract) …

深入Java并发包(3) – 容器那些事

This entry is part 3 of 4 in the series 深入Java并发包

说并发包, 不能不说并发安全的容器,这次选择几个最常用的容器,结合前面分析过的Lock基础工具,看看它们的并发容器底层原理。着重分析线程安全部分。 CopyOnWriteArrayList VS. ArrayList CopyOnWriteArrayList 是 ArrayList的线程安全版本, 底层保存均用数组实现, 并含有一个全局变量ReentrantLock实现线程安全. 在add, re …

java Future 探秘

This entry is part 4 of 4 in the series 深入Java并发包

在java多线程开发中,最简单的实现方案是直接创建一个Thread对象,通过Thread.start()方法启动一个线程执行异步任务。像下面这样的一段代码你应该非常熟悉。 但是这样创建的子线程任务有非常大的局限性,首当其冲就是子线程无法跟父线程通信。比如父线程需要等待子线程结束后才结束这样的场景。你可能会想出共享变量的方式来实现线程通信,像下面这样的代码你肯定写过: 只是这种土方法的局限性也很强, …