1

在哪里可以找到使用 Java 的异步编程示例?我有兴趣在异步编程中寻找模式来构建具有响应性(防止定期挂起和停止响应用户输入的应用程序以及不及时响应客户端请求的服务器应用程序)和可伸缩性的应用程序。

尤其是查看执行 I/O 操作(例如文件读/写、Web 请求和数据库查询)的示例将很有帮助,并且还涉及大量 CPU 处理,例如网页中的购物建议。

哪些 Java 库可以帮助确定应用程序的响应何时不可预测 - 因为应用程序的线程执行 I/O 请求,应用程序基本上放弃了对 I/O 设备(硬盘驱动器、网络或其他)

4

5 回答 5

2

在 GUI 中,您可以使用线程来执行后台任务。

Java 在新的 I/O API (NIO) 中支持非阻塞 I/O。

如果您的问题更面向架构,本书将深入讨论异步模式:Martin Fowler的企业应用程序架构模式。

于 2010-02-20T05:26:45.373 回答
2

对于在文件上执行非阻塞 IO 的异步操作的示例,您可以在此处查看一些示例:https ://github.com/javasync/idioms (免责声明我是作者)。

我在介绍 Java 中的异步编程时使用了这个示例,我们探索了基于回调的,CompletableFuture最后是响应式流

于 2020-05-08T13:06:50.250 回答
0

在 Web 环境中,您可以使用新的 j2ee6 异步特性。看看 http://docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html

于 2012-07-27T22:39:46.340 回答
0

哪些 Java 库可以帮助确定应用程序的响应何时不可预测 - 因为应用程序的线程执行 I/O 请求,应用程序基本上放弃了对 I/O 设备(硬盘驱动器、网络或其他)

如果我对您的理解正确,您正在要求一些库来检查其他线程以确定它们是否在 I/O 调用中被阻塞。

我认为这在标准 JVM 中是不可能的。此外,我认为这不一定足以保证“响应能力”。

于 2010-02-20T06:42:27.060 回答
0

如果您正在使用某种 I/O 操作(例如在 InputStream 上读取,它可能会阻塞)您将其放入线程中,最简单的解决方案是在线程上使用给定数量的 join:

MyThread myThread = new MyThread(); 
myThread.start();
myThread.join(10000);

然后,此连接将等待最多 10 秒。在那之后你可以忽略线程,......你也可以使用装饰器模式你可以在这里阅读更多。

于 2010-02-20T12:12:24.037 回答