パッケージ内のユーティリティを理解しようとしていますが、メソッド内のタスクが正常に完了した後、オブジェクトをにjava.util.concurrent
送信できることを学びました。これは、によって返される値で満たされたを返します。callable
ExecutorService
Future
callable
call()
すべての呼び出し可能オブジェクトが複数のスレッドを使用して同時に実行されることを理解しています。
バッチタスクの実行がどれだけ改善されるかを知りたいと思ったときExecutorService
、時間をキャプチャすることを考えました。
以下は私が実行しようとしたコードです-
package concurrency;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ExecutorExample {
private static Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
StringBuilder builder = new StringBuilder();
for(int i=0; i<5; i++) {
builder.append(i);
}
return builder.toString();
}
};
public static void main(String [] args) {
long start = System.currentTimeMillis();
ExecutorService service = Executors.newFixedThreadPool(5);
List<Future<String>> futures = new ArrayList<Future<String>>();
for(int i=0; i<5; i++) {
Future<String> value = service.submit(callable);
futures.add(value);
}
for(Future<String> f : futures) {
try {
System.out.println(f.isDone() + " " + f.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.out.println("Executer callable time - " + (end - start));
service.shutdown();
start = System.currentTimeMillis();
for(int i=0; i<5; i++) {
StringBuilder builder = new StringBuilder();
for(int j=0; j<5; j++) {
builder.append(j);
}
System.out.println(builder.toString());
}
end = System.currentTimeMillis();
System.out.println("Normal time - " + (end - start));
}
}
そしてこれがこれの出力です-
true 01234
true 01234
true 01234
true 01234
true 01234
Executer callable time - 5
01234
01234
01234
01234
01234
Normal time - 0
私が何かを見逃している、または何かを間違った方法で理解している場合は、私に知らせてください。
このスレッドのためにあなたの時間と助けを事前に感謝します。