【发布时间】:2016-07-14 16:27:38
【问题描述】:
在Java上做了很多搜索之后,我真的很困惑以下问题:
为什么我要选择异步方法而不是多线程方法?
Java futures 应该是非阻塞的。 非阻塞是什么意思?当从
Future--即get()--提取信息的方法是阻塞的并且会简单地停止整个线程直到方法完成处理时,为什么称它为非阻塞?也许是一个回调方法,在处理完成时敲响完成的教堂钟声?-
如何使方法异步?什么是方法签名?
public List<T> databaseQuery(String Query, String[] args){ String preparedQuery = QueryBaker(Query, args); List<int> listOfNumbers = DB_Exec(preparedQuery); // time taking task return listOfNumbers; }这种虚构的方法如何成为非阻塞方法?或者,如果您愿意,请提供一个简单的同步方法和它的异步方法版本。
【问题讨论】:
-
一种选择是启动一个新线程来进行未来的解析,但这可能并不总是可行的。
-
dzone.com/articles/javautilconcurrentfuture Future 承诺在未来的某个时间返回结果(或重新抛出异常)。使用 isDone() 或 get(timeout) 轮询完成。在完成或向 executor worker 提交更多 Futures 之前,您可以做其他事情。如果您只需要一直同步一个单线程请求-响应,那么它可能更适合编写传统的东西。您需要创建 Callable
实例并将其提交给 executor worker。 Executor 给你一个 Future 承诺者。
标签: java multithreading asynchronous