Java多线程进化史[译]

737 阅读2分钟

我们的一个读者,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

一些异常类比如:

  1. java.lang.IllegalMonitorStateException
  2. java.lang.IllegalStateException
  3. java.lang.IllegalThreadStateException.

同时还有一些同步的集合。比如:java.util.Hashtable

JDK 1.2JDK 1.3中没有关于多线程的显著改变。(如果我错过任何事情请指正我)

JDK 1.4中发生了一些JVM级别的变化。它可以使用单个调用来挂起/恢复多线程。但是并没有主要的API产生改变。

JDK 1.5JDK 1.x之后的第一个重大版本;它包含了多并发工具包。Executor, semaphore, mutex, barrier, latches, concurrent collectionsblocking 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

相关指引

我希望上面列出的东西可以帮助你理解JDK版本中的多线程特性。