package test.utils.concurrent;
import com.firefly.utils.concurrent.BlockingTask;
import com.firefly.utils.exception.CommonRuntimeException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.stream.IntStream;
/**
* @author Pengtao Qiu
*/
public class TestBlockingTask {
public static void main(String[] args) {
List<ForkJoinTask<Integer>> tasks = new ArrayList<>();
ForkJoinPool pool = new ForkJoinPool(2);
for (int i = 0; i < 10; i++) {
final int x = i;
ForkJoinTask<Integer> task = pool.submit(() -> BlockingTask.callInManagedBlock(() -> {
sleep();
return x;
}));
tasks.add(task);
}
tasks.forEach(task -> {
try {
System.out.println(task.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
}
public static void main2(String[] args) {
long start = System.currentTimeMillis();
System.out.println("start");
IntStream.range(0, 10).parallel().forEach((x) -> sleep());
long end = System.currentTimeMillis();
System.out.println("end -> " + (end - start));
start = System.currentTimeMillis();
System.out.println("start2");
IntStream.range(0, 10).parallel().forEach((x) -> BlockingTask.callInManagedBlock(() -> {
sleep();
return x;
}));
end = System.currentTimeMillis();
System.out.println("end2 -> " + (end - start));
}
public static void sleep() {
try {
System.out.println(System.currentTimeMillis() + ": Sleeping " + Thread.currentThread().getName());
Thread.sleep(5000);
} catch (InterruptedException e) {
throw new CommonRuntimeException(e);
}
}
}