...
 
Commits (17)
    https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/de4a4a0bce0a27b6cc57f51bae8a8b15c334ce2f Update 07.md 2022-07-08T20:45:54+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/b40c903c5464a02b46687dcf282fec9c223a9462 Update 08.md 2022-07-08T20:46:03+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/fa2f0b74306f7b2f28c8d54c5c69c472a7f710b5 Update 09.md 2022-07-08T20:46:13+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/839b190826ff0cce2c02a414eeb5f85cf04ed488 Update 10.md 2022-07-08T20:46:23+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/3653e2d46369840d718359bce3c45cd877e2884a Update 11.md 2022-07-08T20:46:31+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/c96575ed18e20cd23bab03a071d5d7ac69a573b6 Update 12.md 2022-07-08T20:46:39+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/6464b97b1722b0071fc7151d619956ccc917283e Update 13.md 2022-07-08T20:46:50+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/b5b60f9f83fbf2ee22458f49963b30d04259ec62 Update 09.md 2022-07-08T20:59:50+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/61e6a4a4baff56db981c767aadf587befea092a7 Update 1.md 2022-07-11T22:29:40+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/1576448dcc41e58ec28eee14b7ff2f345eb88c42 Update 2.md 2022-07-11T22:30:27+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/44510f6f375889fdd05267f586491f09a39361b9 Update 3.md 2022-07-11T22:30:47+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/e70b4ebb7f027bf5380763713302b3701ed6f393 Update 4.md 2022-07-11T22:31:08+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/265af96f166552c8b99e09809e2165dcb9eb54dd Update 5.md 2022-07-11T22:31:19+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/fdc2f2134867ea6d4ecf22f8c979906f9bd932f9 Update 6.md 2022-07-11T22:31:30+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/fbe88fef4f54af885b65824c4690c7c4c5b512cd Update 7.md 2022-07-11T22:31:47+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/bf831541580cd580210d345b871379bdc218333b Update 8.md 2022-07-11T22:31:58+08:00 布客飞龙 562826179@qq.com https://gitcode.net/OpenDocCN/apachecn-java-zh/-/commit/350ed58d54e56c7539f49716e251c82985f0668e Update 9.md 2022-07-11T22:32:10+08:00 布客飞龙 562826179@qq.com
# 一、从面向对象到函数式编程
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是向读者介绍使用设计模式和 Java 中可用的最新特性编写健壮、可维护和可扩展代码的基本概念。为了实现我们的目标,我们将讨论以下主题:
* 什么是编程范式?
......@@ -396,4 +404,4 @@ public bool lock(Key key)
在介绍了类关系并展示了如何在图中表示它们之后,我们进入下一节,在这里我们描述了什么是面向对象的设计模式和原则,并介绍了主要原则。
在下一章中,我们将继续介绍一组处理对象创建的设计模式,使我们的代码具有健壮性和可扩展性。
\ No newline at end of file
在下一章中,我们将继续介绍一组处理对象创建的设计模式,使我们的代码具有健壮性和可扩展性。
# 二、创建型模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是学习创造模式。创造模式是处理对象创造的模式。在本章中,我们将介绍以下主题:
* 单例模式
......@@ -561,4 +569,4 @@ public void releaseResource(Resource resource)
# 总结
在这一章中,我们讨论了创造性的设计模式。我们讨论了单例、工厂、构建器、原型和对象池模式的变体。所有这些模式都用于实例化新对象,并在创建对象时提供代码灵活性和可重用性。在下一章中,我们将介绍行为模式。虽然创建模式帮助我们管理对象的创建,但行为模式提供了管理对象行为的简单方法。
\ No newline at end of file
在这一章中,我们讨论了创造性的设计模式。我们讨论了单例、工厂、构建器、原型和对象池模式的变体。所有这些模式都用于实例化新对象,并在创建对象时提供代码灵活性和可重用性。在下一章中,我们将介绍行为模式。虽然创建模式帮助我们管理对象的创建,但行为模式提供了管理对象行为的简单方法。
# 三、行为模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是学习行为模式。行为模式是关注对象交互、通信和控制流的模式。大多数行为模式是基于组合和委托而不是继承的。我们将在本章中了解以下行为模式:
* 责任链模式
......@@ -681,4 +689,4 @@ public class CarCaretaker
# 总结
在本节中,我们讨论了各种行为模式。我们研究了一些最常用的行为模式,如责任链模式、命令模式、解释器模式等等。这些模式帮助我们以可控的方式管理对象的行为。在下一章中,我们将研究有助于我们管理复杂结构的结构模式。
\ No newline at end of file
在本节中,我们讨论了各种行为模式。我们研究了一些最常用的行为模式,如责任链模式、命令模式、解释器模式等等。这些模式帮助我们以可控的方式管理对象的行为。在下一章中,我们将研究有助于我们管理复杂结构的结构模式。
# 四、结构模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是学习结构模式。结构模式是通过利用对象和类之间的关系来创建复杂结构的模式。大多数结构模式都是基于继承的。在本章中,我们将只关注以下 GOF 模式:
* 适配器模式
......@@ -1003,4 +1011,4 @@ class Location
在本章中,我们学习了 GOF 结构模式。我们查看了它们的描述和意图,并用示例代码说明了它们的用法。我们学习了为什么,何时,以及如何应用它们,同时也研究了它们之间的细微差别。我们还简要介绍了其他鲜为人知的结构模式。
在接下来的章节中,我们将看到这些模式中的一些是如何在函数式和反应式世界中发生变化的。
\ No newline at end of file
在接下来的章节中,我们将看到这些模式中的一些是如何在函数式和反应式世界中发生变化的。
# 五、函数式模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
本章的目的是学习函数模式,以及通过引入函数式编程风格(现在在最重要的编程语言中是可能的)对传统模式所做的更改。Java8 引入了一些函数式特性,增加了一个新的抽象级别,影响了我们编写一些面向对象设计模式的方式,甚至使其中一些模式变得无关紧要。在本章中,我们将看到设计模式是如何被新的语言特性所改变,甚至取代的。在他的论文《动态语言中的设计模式》中,Peter Norvig 注意到 23 种设计模式中有 16 种更简单,或者被动态语言中现有的语言特征所取代,比如 Dylan。全文见[这个页面](http://norvig.com/design-patterns/)。在这一章中,我们将看到什么可以被取代,以及新出现的模式是怎样和怎样的。正如 peternorvig 在他的论文中所说的,*很久以前,子程序调用只是一种模式*,随着语言的发展,这些模式会发生变化或被替换。
为了运行本章中的代码,我们使用了 Java 中可用的 JShell REPL 工具,可以从 Windows 中的`$JAVA_HOME/bin/jshell on Linux or %JAVA_HOME%/bin/jshell.exe`访问该工具。
......@@ -805,4 +813,4 @@ publicstaticvoid main(String[] args)
在本章中,我们了解了函数式编程的含义、最新 Java 版本提供的特性,以及它们是如何改变一些现有的 GOF 模式的。我们还使用了一些函数式编程设计模式。
在下一章中,我们将深入到反应式世界,学习如何使用 RxJava 创建响应式应用。
\ No newline at end of file
在下一章中,我们将深入到反应式世界,学习如何使用 RxJava 创建响应式应用。
# 六、让我们开始反应式吧
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
这一章将描述反应式编程范式,以及为什么它能很好地适用于带有函数元素的语言。读者将熟悉反应式编程背后的概念。我们将介绍在创建反应式应用时从观察者模式和迭代器模式中使用的元素。这些示例将使用反应式框架和名为 **RxJava**(版本 2.0)的 Java 实现。
我们将讨论以下主题:
......@@ -675,4 +683,4 @@ NuclearCell2 temperature=88.4133065761349
在本章中,我们学习了反应式编程,然后重点介绍了可用的最常用的反应式库之一——RxJava。我们学习了反应式编程抽象及其在 RxJava 中的实现。我们通过了解可观察对象、调度器和订阅是如何工作的、最常用的方法以及它们是如何使用的,从而通过具体的示例迈出了进入 RxJava 世界的第一步。
在下一章中,我们将学习最常用的反应式编程模式,以及如何在代码中应用它们。
\ No newline at end of file
在下一章中,我们将学习最常用的反应式编程模式,以及如何在代码中应用它们。
# 七、反应式设计模式
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
在最后一章中,我们讨论了反应式编程风格,并强调了进行反应式编程的重要性。在本章中,我们将逐一回顾反应式编程的四大支柱,即响应性、弹性、弹性和消息驱动,并了解实现这些支柱的各种模式。本章将介绍以下主题:
* 响应模式
......@@ -596,4 +604,4 @@ Pub-Sub 模式帮助我们实现组件之间的松散耦合,因为订阅者不
在本章中,我们讨论了帮助我们保持应用的反应式的模式,或者换句话说,帮助我们实现反应式编程的四大支柱,即响应性、弹性、弹性和消息驱动的通信。
在下一章中,我们将继续我们的旅程,探索一个架构良好的应用的一些当代方面。
\ No newline at end of file
在下一章中,我们将继续我们的旅程,探索一个架构良好的应用的一些当代方面。
# 八、应用架构的发展趋势
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
每当我们开始开发一个应用时,我们首先需要确定的是我们将要使用的设计或架构。随着软件行业在过去几十年的成熟,我们用来设计系统的方式也发生了变化。在本章中,我们将讨论我们在最近的过去看到的一些重要的架构趋势,这些趋势至今仍然相关。我们将尝试分析这些架构模式的好、坏和丑,并找出哪种模式能够解决哪种类型的问题。本章将介绍以下主题:
* 什么是应用架构?
......@@ -632,4 +640,4 @@ public class LambdaMethodHandler implements RequestStreamHandler
这里需要注意的一点是,这些架构风格并不是相互排斥的;事实上,它们是相辅相成的。因此,大多数时候,您可能会使用这些架构风格的混合体。例如,如果我们正在进行基于面向服务架构的设计,我们可能会看到这些服务的内部实现可能是基于分层或 MVC 架构的。此外,我们可能最终将一些服务分解为微服务,而在这些微服务中,一些可能以无服务器的方式实现为函数。关键是,您必须根据当前要解决的问题选择设计或架构。
在下一章中,我们将重点介绍最近 Java 版本升级中的一些最新趋势和更新。
\ No newline at end of file
在下一章中,我们将重点介绍最近 Java 版本升级中的一些最新趋势和更新。
# 九、Java 最佳实践
> 原文:[Design Patterns and Best Practices in Java](https://libgen.rs/book/index.php?md5=096AE07A3FFC0E5B9926B8DE68424560)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),采用[译后编辑(MTPE)](https://cn.bing.com/search?q=%E8%AF%91%E5%90%8E%E7%BC%96%E8%BE%91)流程来尽可能提升效率。
在本章中,我们将讨论 Java9 和 Java10 中的最佳实践。Java 从 1995 年发布的版本 1.0 到最近的版本 Java10 已经有了很大的发展。我们将快速了解 Java 从一开始到今天的发展历程,但我们将更多地关注 Java9 和 Java10 带来的最新变化。
在本章中,我们将介绍以下主题:
......@@ -839,4 +847,4 @@ Java10 为我们提供了使用`var`关键字声明变量的灵活性,而无
最后,我们讨论了在 Java11 中可以预期的内容,例如添加到垃圾收集中以及将`var`与 Lambda 一起使用。与 Java9 和 Java10 不同,Java11 预计是一个长期版本。而且,根据 Oracles 的 3 年政策,下一个长期版本预计将在 2021 年 Java11 之后的某个时候发布。
Java 自诞生以来已经走过了很长的一段路,它一次又一次地重新发明自己。将来还会有更多的东西,看看 Java 未来的发展会很有趣。
\ No newline at end of file
Java 自诞生以来已经走过了很长的一段路,它一次又一次地重新发明自己。将来还会有更多的东西,看看 Java 未来的发展会很有趣。
# 七、Java 反射类、接口、构造器、方法和字段
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括涉及 Java 反射 API 的 17 个问题。从经典主题,如检查和实例化 Java 工件(例如,模块、包、类、接口、超类、构造器、方法、注解和数组),到*合成**桥接*构造或基于嵌套的访问控制(JDK11),本章详细介绍了 Java 反射 API。在本章结束时,Java 反射 API 将不会有任何秘密未被发现,您将准备好向您的同事展示反射可以做什么。
# 问题
......@@ -2385,4 +2393,4 @@ invocationHandler.countOf("remove");
这是本章的最后一个问题。希望我们已经完成了对 Java 反射 API 的全面遍历。我们已经详细讨论了有关类、接口、构造器、方法、字段、注解等的问题
从本章下载应用以查看结果和其他详细信息。
\ No newline at end of file
从本章下载应用以查看结果和其他详细信息。
# 八、函数式编程-基础和设计模式
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括 11 个涉及 Java 函数式编程的问题。我们将从一个问题开始,这个问题旨在提供从 0 到函数式接口的完整过程。然后,我们将继续研究 GoF 中的一套设计模式,我们将用 Java 函数风格来解释这些模式。
在本章结束时,您应该熟悉函数式编程,并准备好继续处理一组问题,这些问题允许我们深入研究这个主题。您应该能够使用一堆以函数式风格编写的常用设计模式,并且非常了解如何开发代码以利用函数式接口。
......@@ -1268,4 +1276,4 @@ sequence.runSequence();
我们现在已经到了这一章的结尾。使用 Lambda 来减少甚至消除*样板*代码是一种技术,也可以用于其他设计模式和场景。拥有迄今为止积累的知识应该为你相应地调整案例提供坚实的基础。
从本章下载应用以查看结果和其他详细信息。******
\ No newline at end of file
从本章下载应用以查看结果和其他详细信息。******
# 九、函数式编程——深入研究
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括 22 个涉及 Java 函数式编程的问题。这里,我们将重点讨论在流中遇到的涉及经典操作的几个问题(例如,`filter``map`),并讨论无限流、空安全流和缺省方法。这个问题的综合列表将涵盖分组、分区和收集器,包括 JDK12`teeing()`收集器和编写自定义收集器。此外,还将讨论`takeWhile()``dropWhile()`、组合函数、谓词和比较器、Lambda 测试和调试以及其他一些很酷的话题。
一旦您涵盖了本章和上一章,您就可以在生产应用上释放函数式编程了。下面的问题将为您准备各种各样的用例,包括角落用例或陷阱。
......@@ -1266,7 +1274,7 @@ double total = numbers.stream()
然而,要注意那些可能导致不想要的结果的案例。例如,如果我们要计算给定数字的调和平均数,那么就没有一个开箱即用的*归约特例*,因此我们只能依赖`reduce()`,如下所示:
*```java
```java
List<Double> numbers = Arrays.asList(1.0d, 5.0d, 8.0d, 10.0d);
```
......@@ -3493,4 +3501,4 @@ public double area() {
我们的任务完成了!本章介绍无限流、空安全流和默认方法。一系列问题涵盖了分组、分区和收集器,包括 JDK12 `teeing()`收集器和编写自定义收集器。此外,`takeWhile()``dropWhile()`、组合函数、谓词和比较器、Lambda 的测试和调试,以及其他一些很酷的话题。
从本章下载应用以查看结果和其他详细信息。
\ No newline at end of file
从本章下载应用以查看结果和其他详细信息。
# 十、并发-线程池、可调用对象和同步器
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括涉及 Java 并发的 14 个问题。我们将从线程生命周期以及对象级和类级锁定的几个基本问题开始。然后我们继续讨论 Java 中线程池的一系列问题,包括 JDK8 工作线程池。在那之后,我们有关于`Callable``Future`的问题。然后,我们将几个问题专门讨论 Java 同步器(例如,屏障、信号量和交换器)。在本章结束时,您应该熟悉 Java 并发的主要坐标,并准备好继续处理一组高级问题。
# 问题
......@@ -2444,4 +2452,4 @@ private void finalCheckIn() {
本章概述了 Java 并发的主要坐标,应该为下一章做好准备。我们讨论了线程生命周期、对象级和类级锁定、线程池以及`Callable``Future`等几个基本问题
下载本章中的应用以查看结果并查看一些其他详细信息。
\ No newline at end of file
下载本章中的应用以查看结果并查看一些其他详细信息。
# 十一、并发-深入探索
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括涉及 Java 并发的 13 个问题,涉及 Fork/Join 框架、`CompletableFuture``ReentrantLock``ReentrantReadWriteLock``StampedLock`、原子变量、任务取消、可中断方法、线程局部、死锁等方面。对于任何开发人员来说,并发性都是必需的主题之一,在工作面试中不能被忽视。这就是为什么这一章和最后一章如此重要。读完本章,您将对并发性有相当的了解,这是每个 Java 开发人员都需要的。
# 问题
......@@ -2625,4 +2633,4 @@ new Philosopher(forks[0], forks[4])
好吧,就这些!本章讨论了 Fork/Join 框架、`CompletableFuture``ReentrantLock``ReentrantReadWriteLock``StampedLock`、原子变量、任务取消、可中断方法、线程局部和死锁等问题
从本章下载应用以查看结果和其他详细信息。**
\ No newline at end of file
从本章下载应用以查看结果和其他详细信息。**
# 十二、`Optional`
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括 24 个问题,旨在提请您注意使用`Optional`的几个规则。本节介绍的问题和解决方案基于 Java 语言架构师 Brian Goetz 的定义:
`Optional`旨在为库方法返回类型提供一种有限的机制,在这种情况下,需要有一种明确的方式来表示无结果,并且使用`null`表示这种结果极有可能导致错误。”
......@@ -1238,4 +1246,4 @@ public static boolean cartIsEmpty(long id) {
完成!这是本章的最后一个问题。此时,您应该拥有正确使用`Optional`所需的所有参数
从本章下载应用以查看结果和其他详细信息。
\ No newline at end of file
从本章下载应用以查看结果和其他详细信息。
# 十三、HTTP 客户端和 WebSocket API
> 原文:[Java Coding Problems](https://libgen.rs/book/index.php?md5=3280024C263466704C8F7525E5BB6AAE)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 贡献者:[飞龙](https://github.com/wizardforcel)
>
> 本文来自[【ApacheCN Java 译文集】](https://github.com/apachecn/apachecn-java-zh),自豪地采用[谷歌翻译](https://translate.google.cn/)。
本章包括 20 个问题,旨在介绍 HTTP 客户端和 WebSocket API。
你还记得`HttpUrlConnection`吗?好吧,JDK11 附带了 HTTP 客户端 API,它是对`HttpUrlConnection`的重新发明。HTTP 客户端 API 易于使用,支持 HTTP/2(默认)和 HTTP/1.1。为了向后兼容,当服务器不支持 HTTP/2 时,HTTP 客户端 API 将自动从 HTTP/2 降级到 HTTP 1.1。此外,HTTP 客户端 API 支持同步和异步编程模型,并依赖流来传输数据(反应流)。它还支持 WebSocket 协议,该协议用于实时 Web 应用,以较低的消息开销提供客户端-服务器通信。
......@@ -1537,4 +1545,4 @@ Received data: {"visibility":"public","response":"yes","guests":1,"member":{"mem
我们的任务完成了!这是本章的最后一个问题。现在,我们已经到了这本书的结尾。看起来新的 HTTP 客户端和 WebSocketAPI 非常酷。它们具有很大的灵活性和多功能性,非常直观,并且成功地隐藏了许多我们不想在开发过程中处理的令人痛苦的细节。
从本章下载应用以查看结果和其他详细信息。
\ No newline at end of file
从本章下载应用以查看结果和其他详细信息。