我们的一个读者,Anant最近问了一个非常好的问题。他想要我们阐述/列出我们应该知道的所有关于多线程的主题以及在java 8中发生的变化。(从初级到高级)。他想知道java多线程框架从简单的Runnable
接口到java 8最新的特性的进化过程。让我们来解决他的请求。
我花了很多的时间来收集信息。所以如果你有其它看法请随时提出来。
JDK发布多线程概念
对于每个JDK 1.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和JDK 1.3中没有关于多线程的显著改变。(如果我错过任何事情请指正我)
JDK 1.4中发生了一些JVM级别的变化。它可以使用单个调用来挂起/恢复多线程。但是并没有主要的API产生改变。
JDK 1.5 是 JDK 1.x之后的第一个重大版本;它包含了多并发工具包。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升级.
JDK 1.7引入了对ForkJoinPool
的支持。它实现了work-stealing technique来最大化吞吐量。Phaser
类也被添加了进来。
JDK 1.8因Lambda而被广泛所知,然而它同样也有一些关于并发的变化。2个新的接口和4个新的类被添加进了java.util.concurrent包。比如:CompletableFuture
,CompletionException
。
为了增加基于streams facility以及lambda expressions这些新特性的聚合操作,集合框架在java8中经历了一个主要的修改;这样导致大量的方法被添加进了几乎所有的集合类,当然也包括了并发集合。
阅读完整变化: http://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.html
相关指引
- www.cs.princeton.edu/courses/arc…
- programmers.stackexchange.com/questions/1…
- docs.oracle.com/javase/1.5.…
- docs.oracle.com/javase/7/do…
- www.oracle.com/technetwork…
- docs.oracle.com/javase/8/do…
我希望上面列出的东西可以帮助你理解JDK版本中的多线程特性。