Java8-Executors-No.03

简介: import java.util.Arrays;import java.util.List;import java.util.concurrent.Callable;import java.
import java.util.Arrays;
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.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class Executors3 {

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        test1();
//        test2();
//        test3();

//        test4();
//        test5();
    }

    private static void test5() throws InterruptedException, ExecutionException {
        ExecutorService executor = Executors.newWorkStealingPool();

        List<Callable<String>> callables = Arrays.asList(
                callable("task1", 2),
                callable("task2", 1),
                callable("task3", 3));

        String result = executor.invokeAny(callables);
        System.out.println(result);

        executor.shutdown();
    }

    private static Callable<String> callable(String result, long sleepSeconds) {
        return () -> {
            TimeUnit.SECONDS.sleep(sleepSeconds);
            return result;
        };
    }

    private static void test4() throws InterruptedException {
        ExecutorService executor = Executors.newWorkStealingPool();

        List<Callable<String>> callables = Arrays.asList(
                () -> "task1",
                () -> "task2",
                () -> "task3");

        executor.invokeAll(callables)
                .stream()
                .map(future -> {
                    try {
                        return future.get();
                    }
                    catch (Exception e) {
                        throw new IllegalStateException(e);
                    }
                })
                .forEach(System.out::println);

        executor.shutdown();
    }

    private static void test3() {
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

        Runnable task = () -> {
            try {
                TimeUnit.SECONDS.sleep(2);
                System.out.println("Scheduling: " + System.nanoTime());
            }
            catch (InterruptedException e) {
                System.err.println("task interrupted");
            }
        };

        executor.scheduleWithFixedDelay(task, 0, 1, TimeUnit.SECONDS);
    }

    private static void test2() {
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
        Runnable task = () -> System.out.println("Scheduling: " + System.nanoTime());
        int initialDelay = 0;
        int period = 1;
        executor.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.SECONDS);
    }

    private static void test1() throws InterruptedException {
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

        Runnable task = () -> System.out.println("Scheduling: " + System.nanoTime());
        int delay = 3;
        ScheduledFuture<?> future = executor.schedule(task, delay, TimeUnit.SECONDS);

        TimeUnit.MILLISECONDS.sleep(1337);

        long remainingDelay = future.getDelay(TimeUnit.MILLISECONDS);
        System.out.printf("Remaining Delay: %sms\n", remainingDelay);
    }

}
目录
相关文章
|
算法 Java Linux
java中ThreadPool的介绍和使用
java中ThreadPool的介绍和使用
java中ThreadPool的介绍和使用
|
Java Linux
Java ThreadPool 实现
前面我们已经介绍了 JDK 中常用的并发库(JUC)的使用方式, 本文我们着重介绍 JUC 中 ThreadPool 的实现方式。
Java8-Executors-No.02
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.
869 0
Java8-Executors-No.01
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.
810 0
Java8-Synchronized-No.01
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.
914 0
Java8-Synchronized-No.02
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.
797 0
Java8-Thread-No.01
import java.util.concurrent.TimeUnit; public class Threads1 { public static void main(String[] args) { test1(); // test...
800 0
Java8-Lock-No.02
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.
867 0
Java8-Lock-No.05
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.
727 0
Java8-Lock-No.01
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.
649 0