原文: https://howtodoinjava.com/java/multi-threading/java-multi-threading-evolution-and-topics/
我们的一位读者 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.6 中出现了新变化。
JDK 1.7 添加了对ForkJoinPool
的支持,该支持实现了工作窃听技术以使吞吐量最大化。 还添加了Phaser
类。
JDK 1.8 因 Lambda 更改而广为人知,但并发更改也很少。 在java.util.concurrent
包中添加了两个新接口和四个新类。 CompletableFuture
和CompletionException
。
集合框架在 Java 8 中进行了重大修订,以基于新添加的流工具和 lambda 表达式添加聚合操作; 导致在几乎所有Collection
类中以及在并发集合中添加了大量方法。
阅读此链接中的全部更改: http://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.html
参考文献:
- https://www.cs.princeton.edu/courses/archive/fall97/cs461/jdkdocs/relnotes/intro.html
- http://programmers.stackexchange.com/questions/147205/what-were-the-core-api-packages-of-java-1-0
- http://docs.oracle.com/javase/1.5.0/docs/guide/concurrency/overview.html
- http://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/changes7.html
- http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html
- http://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/changes8.html
我希望上面的清单可以帮助您理解多线程特性(每个 JDK 版本)。
学习愉快!