ScheduledThreadPoolExecutor

深入理解Java线程池:ScheduledThreadPoolExecutor

好的博客:https://www.cnblogs.com/liuzhihu/p/8177787.html

线程实现的三种方式:

    /**
     * ①继承Thread类
     */
    @Test
    public void newThread() {
        MyThread myThread = new MyThread();
        myThread.run();
        System.out.println("运行结束");
    }

    /**
     * ②实现Runnable接口
     */
    @Test
    public void newRunnable() {
        LogRunnable runnable = new LogRunnable("hehehe");
        Thread myThread = new Thread(runnable);
        myThread.start();
        System.out.println("运行结束!");
    }

    /**
     * ③使用线程池
     */
    @Test
    public void excuteTask() {

        // 创建线程池 (线程IO 6秒,(四核测试数据:delay 10毫秒(1w 60s 10W 600秒);delay 6秒(1w 66s 10W
        // 606秒)))
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(100);

        ExecutorService executorService = Executors.newFixedThreadPool(4);

        List<String> logList = new ArrayList<>();
        logList.add("first");
        logList.add("second");
        logList.add("three");

        // foreach
        logList.stream().forEach(vo -> {

            scheduledThreadPool.schedule(new LogRunnable(vo), new Random().nextInt(10) + 5, TimeUnit.SECONDS);

        });

        // 关闭线程池
        scheduledThreadPool.shutdown();

        // Blocks until all tasks have completed execution after a shutdown
        // request, or the timeout occurs, or the current thread is
        // interrupted, whichever happens first.
        try {
            scheduledThreadPool.awaitTermination(8, TimeUnit.HOURS);
        } catch (Exception e) {
        }

    }

    class MyThread extends Thread {

        @Override
        public void run() {
            super.run();
            System.out.println("haha");
        }
    }

    class LogRunnable implements Runnable {

        private String str;

        public LogRunnable(String str) {
            super();
            this.str = str;
        }

        @Override
        public void run() {

            System.out.println(this.str);

        }

    }

Last updated

Was this helpful?