私はいくつかのコードを継承しましたし、元の開発者が左の誰もありません。コードは大きくCompletableFuture
を使用しています。初めて使用するので、まだ私の頭の中を包み込んでいます。私が理解しているように、通常はが、時間のかかる作業が実行されている間に何か他のことを行うことを可能にするマルチスレッド化メカニズムとともに使用され、その後単にFutureを介してその結果をフェッチします。しかし、私は継承しました。このアプリケーションでは、任意のマルチスレッドを使用していない次のパターンは時代の束現れるマルチスレッドを使用せずにFutureを使用するポイントは何ですか?
interface ArchiveSearcher { String search(String target); }
class App {
ExecutorService executor = ...
ArchiveSearcher searcher = ...
void showSearch(final String target) throws InterruptedException {
Future<String> future = executor.submit(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
displayOtherThings(); // do other things while searching
try {
displayText(future.get()); // use future
} catch (ExecutionException ex) { cleanup(); return; }
}
}
:the javadocのように私には
public Object serve(Object input) throws ExecutionException, InterruptedException {
CompletableFuture<Object> result = delegate1(input);
return result.get();
}
private CompletableFuture<Object> delegate1(Object input) {
// Do things
return delegate2(input);
}
private CompletableFuture<Object> delegate2(Object input) {
return CompletableFuture.completedFuture(new Object());
}
を、これはあります相当:もちろん
public Object serve(Object input) {
Object result = delegate1(input);
return result;
}
private Object delegate1(Object input) {
// Do things
return delegate2(input);
}
private Object delegate2(Object input) {
return new Object();
}
コードははるかに複雑で、エラーの場合にはexceptionallyCompletedFuture
を返しますが、Callable
である、ないRunnable
、no Executor
、no supplyAsync()
マルチスレッドの兆候はありません。私は何が欠けていますか?単一スレッドのコンテキストでFuture
を使用するポイントは何ですか?
UI関連の作業はありますか?メインスレッドが物を計算する場合、多くは遅くなります。 –
@ChristianKuetbachいいえ、ありません。しかし、もしあればどうしますか? 「メインスレッド」はどういう意味ですか?私のポイントは、上記のアプローチで私の理解には、すべての "メインスレッド"です。 – mark951131b
私はAndroidの開発者ではありませんが、私は主なスレッドとは何かを意味するようなAndroidの質問をたくさん見てきました。 SwingのEvent Dispatch Threadのようなものです。 –