new Thread(new Runnable() {
public void run() {
.............
.............
.............
}
}).start();
メインでこれを行うと、新しいスレッドが作成され、非同期計算のためにタスクが送信されます。
FutureTask のドキュメントを見ると、次のようにも書かれています。
キャンセル可能な非同期計算。このクラスは、Future の基本実装を提供し、計算を開始およびキャンセルするメソッド、計算が完了したかどうかを照会するメソッド、および計算の結果を取得するメソッドを備えています。
では、内部でスレッドを作成し、インスタンス化時に指定したタスクを次のようにサブミットする方法FutureTask
は次のとおりです。asynchronous computation
FutureTask
FutureTask f = new FutureTask(new MyCallable());
それ以外の場合は非同期計算にすることはできません。非同期計算にするために、タスクをスレッドに送信するFutureTask
ソース コードのコード スニペットを提供してください。ありがとう。
答えがわかりました。基本的に、呼び出し元と同じスレッドでタスクを実行しようとしています。与えられたコードでそれはかなり明白です:
あなたがfutureTask.run()
それを呼び出すsync.innerRun();
とsync
、内部クラスのインスタンスが呼び出されますSync
。つまりcall()
、同じスレッドで呼び出し可能なオブジェクトを呼び出すだけです。
void innerRun() {
if (!compareAndSetState(READY, RUNNING))
return;
runner = Thread.currentThread(); //here it is getting the current thread
if (getState() == RUNNING) {
V result;
try {
result = callable.call();//here calling call which executes in the caller thread.
} catch (Throwable ex) {
setException(ex);
return;
}
set(result);
} else {
releaseShared(0); // cancel
}
}