【揭秘】ExecutorService和ScheduledExecutorService区别?-使用ScheduledExecutorService

时间:2024-01-26 21:35:59
import java.util.concurrent.Executors;  
import java.util.concurrent.ScheduledExecutorService;  
import java.util.concurrent.TimeUnit;  
  
public class ScheduledExecutorServiceExample {  
  
    public static void main(String[] args) {  
        // 创建一个ScheduledExecutorService实例  
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);  
  
        // 提交一个延迟3秒后执行的任务  
        scheduledExecutorService.schedule(() -> {  
            System.out.println("Delayed task executed after 3 seconds");  
        }, 3, TimeUnit.SECONDS);  
  
        // 提交一个立即执行然后每隔1秒重复执行的任务  
        scheduledExecutorService.scheduleAtFixedRate(() -> {  
            System.out.println("Repeating task executed every 1 second");  
        }, 0, 1, TimeUnit.SECONDS);  
  
        // 注意:在实际应用中,应该在不再需要ScheduledExecutorService时将其关闭,  
        // 但在这个例子中,让任务无限期地执行下去。在实际情况下,可能会有适当的停止条件。  
  
        // 为了避免程序立即退出,在这里简单地等待一段时间,让任务有机会执行。  
        // 这只是为了演示,并不是推荐的做法。  
        try {  
            Thread.sleep(10000); // 等待10秒,让上面的任务有机会执行几次  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
  
        // 关闭ScheduledExecutorService  
        scheduledExecutorService.shutdown();  
        try {  
            if (!scheduledExecutorService.awaitTermination(800, TimeUnit.MILLISECONDS)) {  
                scheduledExecutorService.shutdownNow();  
            }  
        } catch (InterruptedException e) {  
            scheduledExecutorService.shutdownNow();  
        }  
    }  
}

上面代码中创建了一个ScheduledExecutorService实例,并指定了线程池的大小为2,然后,提交了两个任务:一个延迟3秒后执行,另一个立即执行并每隔1秒重复执行。

关注我,每天学习互联网编程技术 - 程序员古德

END!