知足常乐 俭以养德
Anant,我的读者之一,问了一个嘎嘎好的问题:是否可以详细说明多线程包括java 8中的相应改进的相关主题(从入门高阶)。他想要的就是从简单的Runnable接口到java 8最新特性的多线程演变过程,我今天就满足他。
我费了九牛二虎之力终于收集到了以下信息,如果哪里不太完善,请愉快的通知我(反正我也不改)。
在JDK1.x版本里只有很少的类出现。具体的接口/类如下:
java.lang.Threadjava.lang.ThreadGroupjava.lang.Runnablejava.lang.Processjava.lang.ThreadDeathjava.lang.IllegalMonitorStateExceptionjava.lang.IllegalStateExceptionjava.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