知足常乐 俭以养德
Anant,我的读者之一,问了一个嘎嘎好的问题:是否可以详细说明多线程包括java 8中的相应改进的相关主题(从入门高阶)。他想要的就是从简单的Runnable
接口到java 8最新特性的多线程演变过程,我今天就满足他。
我费了九牛二虎之力终于收集到了以下信息,如果哪里不太完善,请愉快的通知我(反正我也不改)。
在JDK1.x版本里只有很少的类出现。具体的接口/类如下:
java.lang.Thread
java.lang.ThreadGroup
java.lang.Runnable
java.lang.Process
java.lang.ThreadDeath
java.lang.IllegalMonitorStateException
java.lang.IllegalStateException
java.lang.IllegalThreadStateException
除此之外还有一丢丢的同步集合,例如java.util.Hashtable
JDK 1.2和1.3 在多线程这块没什么显著改变(如果有什么出入请更正)
JDK 1.4,只有一点JVM层面关于单次(single call)调用挂起(suspend)/恢复(resume)多线程的改动
JDK 1.5 算是一个大的改动,它融入了多线程并发的各种辅助类:Executor
,semaphore
,mutex
,barrier
,latches
,concurrent collections
以及 blocking queues
,所有的这些都被包含在了这个版本中,java多线程应用云的巨大改变正是孕育于此。
完整的变更列表看这里:http://docs.oracle.com/javase/1.5.0/docs/guide/concurrency/overview.html
JDK 1.6 相比于API的升级更多的是平台的修复,因此在这个版本中出现了一些新的API
JDK 1.7 增加对ForkJoinPool
的支持,ForkJoinPool
通过实现工作-窃取(work-stealing
)技术来打到最大吞吐量,Phaser
类也被引入
JDK 1.8 你懂的 Lambda
的引入,然而在并发这块仍然没有太大改动,只有2个接口和4个类引入到了java.util.concurrent
包,比如CompletableFuture
和CompletionException
在java 8 中,为了增加基于新添加的stream
功能和lambda
表达式的聚合操作,集合框架经历了一次大的修订,因此大量方法被几乎全部引入到了Collection
类中,也包括并发集合。
完整的变更列表看这里:http://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.html
参考:
希望上述列表能帮助你理解多线程特征的JDK版本指导
译者注:网友在评论区内的补充
1.7
TransferQueue, ConcurrentLinkedDeque, and ThreadLocalRandom