package karalama.thread;
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;
class TaskResult {
private String resultStr;
public TaskResult(String resultStr) {
this.resultStr = resultStr;
}
public String getResultStr() {
return resultStr;
}
}
public class ExecuterTester {
private static final class CallableTask implements Callable<TaskResult> {
private String name ;
private long waitTime;
public CallableTask(String name, long waitTime) {
this.name = name;
this.waitTime = waitTime;
}
@Override
public TaskResult call() throws Exception {
System.out.println(name + " started");
long t = System.currentTimeMillis();
Thread.sleep(waitTime);
String result = name + " ended - " + (System.currentTimeMillis()-t) / 1000 + " sn geçti.";
//System.out.println(result);
return new TaskResult(result);
}
}
public static void main(String args[]) {
ExecutorService executorService = Executors.newCachedThreadPool();
List<Callable<TaskResult>> tasks = new ArrayList<Callable<TaskResult>>();
tasks.add(new CallableTask("task1", 1000));
tasks.add(new CallableTask("task2", 2000));
tasks.add(new CallableTask("task3", 3000));
tasks.add(new CallableTask("task4", 4000));
tasks.add(new CallableTask("task5", 5000));
try {
System.out.println("Paralel İşlem");
long t = System.currentTimeMillis();
List<Future<TaskResult>> futureList = executorService.invokeAll(tasks);
for (Future<TaskResult> future : futureList) {
TaskResult taskResult = future.get();
System.out.println(taskResult.getResultStr());
}
System.out.println("Toplamda " + (System.currentTimeMillis()-t) / 1000 + " sn geçti.");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println("\nSeri İşlem");
long t = System.currentTimeMillis();
for (Callable<TaskResult> task : tasks) {
Future<TaskResult> future = executorService.submit(task);
try {
TaskResult taskResult = future.get();
System.out.println(taskResult.getResultStr());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
System.out.println("Toplamda " + (System.currentTimeMillis()-t) / 1000 + " sn geçti.");
}
}
Uygulama Çıktısı:
Paralel İşlem
task1 başladı
task2 başladı
task3 başladı
task4 başladı
task5 başladı
task1 bitti - 1 sn geçti.
task2 bitti - 2 sn geçti.
task3 bitti - 3 sn geçti.
task4 bitti - 4 sn geçti.
task5 bitti - 5 sn geçti.
Toplamda 5 sn geçti.
Seri İşlem
task1 başladı
task1 bitti - 1 sn geçti.
task2 başladı
task2 bitti - 2 sn geçti.
task3 başladı
task3 bitti - 3 sn geçti.
task4 başladı
task4 bitti - 4 sn geçti.
task5 başladı
task5 bitti - 5 sn geçti.
Toplamda 15 sn geçti.
ali kemal taşçı
Hiç yorum yok:
Yorum Gönder