日期:2014-05-19  浏览次数:20743 次

面试官让我看CONCURRENT这个包,请教如果入手
一周的时间让我学学,怎么学呢,从未接触过这个包啊

------解决方案--------------------
这个包中的东西一周肯定是学不完的,一周基本上能看看这包中主要有些啥,主要是干些啥的。

JDK 5 及之后,Java 并发编程的精华全都在这个包之中了,这个称为 Java 并发包,这个包中的东西都是非常有技术含量的东西。

需要说明是 Java 并发包(含子包)中所有的类都是线程安全的,可以被多个线程共享访问。

我对着 API 文档,整理了一下这个包中主要的东西:

1:并发集合。如:各种并发 Queue 实现类、ConcurrentMap 实现类,等等;
2:线程执行器。如:任务调度器线程池(ScheduledThreadPoolExecutor)、普通线程池(ThreadPoolExecutor),及所有 Executor 接口的实现类;
3:同步器。如:信号量(Sempahore)、循环障栅(CyclicBaririer)、倒计数门闩(CountDownLatch)、交换器(Exchanger)等
4:异步计算工具。Callable, Future, FutureTask 等
5:同步锁。java.util.concurrent.locks 包中,含有可重入锁(ReentrantLock)、可重入读写锁(ReentrantReadWriteLock)、条件变量(Condition)等
6:原子变量。java.util.concurrent.atomic 包中所有的东西。这里的东西很有用,比如普通代码中在共享变量 i 上执行 i++ 操作不是线程安全的,若使用了 AtomicInteger#getAndIncrement() 则就是线程安全的

并发包基本上是由 Doug Lea 编写的。什么?Doug Lea 是谁?可呵,如果没听说过 Doug Lea 这个人,那么就好好地补补课吧。

要深入了解 Java 并发包中的东西,比如,想看一下实现原理什么的,没有一定的多核程序设计的功底那基本上是不可能做到的。像 atomic 包中的东西直接使用 CPU 上的 CAS(比较并交换)指令进行操作的,采用 CAS 操作可以实现无等待式的原子操作。