Java 并发编程之线程池 ScheduledThreadPool

ScheduledThreadPool 为定时任务线程池

1)定义任务线程

public class Task implements Runnable {

    private String name;

    Task(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " Start." + name);
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + " End.");
    }

    @Override
    public String toString() {
        return this.name;
    }
}

2)线程池

public class ScheduledThreadPoolTest {
    public static void main(String[] args) {
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
        try {
            for (int i=0; i<3; i++) {
                TimeUnit.SECONDS.sleep(5);
                Task task = new Task(i + "");
                scheduledThreadPool.schedule(task, 2, TimeUnit.SECONDS);
            }
            TimeUnit.SECONDS.sleep(20);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        scheduledThreadPool.shutdown();
        while(!scheduledThreadPool.isTerminated()){
        }
        System.out.println("all threads finished");
    }
}

3)ScheduledExecutorService还有另外两个方法

scheduledThreadPool.scheduleAtFixedRate(task, 2, 5, TimeUnit.SECONDS);

# 每5s执行一次线程,每次线程延后2s

scheduledThreadPool.scheduleWithFixedDelay(task, 2, 5, TimeUnit.SECONDS);

# 延迟5s执行线程,再延迟2s


版权声明:本文为suoyx原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。