Java的四種常見線程池及Scheduled定時線程池實現(xiàn)詳解
四種常見線程池
1. FixedThreadPool(固定大小線程池)
該線程池包含固定數(shù)量的線程,當有新任務提交時,如果線程池中有空閑線程,則立即執(zhí)行;如果沒有空閑線程,則任務將等待,直到有空閑線程為止。
2. CachedThreadPool(緩存線程池)
該線程池可以根據(jù)需要創(chuàng)建新線程,如果有空閑線程可用,則會重用空閑線程;如果沒有可用線程,則會創(chuàng)建新線程。適用于任務執(zhí)行時間短暫的情況。
3. SingleThreadExecutor(單線程線程池)
該線程池只有一個工作線程,所有任務按照提交順序依次執(zhí)行。
4. ScheduledThreadPool(定時線程池)
該線程池用于執(zhí)行延遲任務或定期任務,可以指定任務的延遲時間或執(zhí)行周期。
ScheduledThreadPool的實現(xiàn)
在Java中,我們可以通過Executors類來創(chuàng)建ScheduledThreadPool。Executors類提供了幾個靜態(tài)方法來創(chuàng)建不同類型的線程池,包括ScheduledThreadPool。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledThreadPoolExample {
public static void main(String[] args) {
// 創(chuàng)建ScheduledThreadPool,參數(shù)為線程池的大小
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
// 延遲1秒后執(zhí)行任務
scheduledThreadPool.schedule(new RunnableTask(), 1, TimeUnit.SECONDS);
// 延遲2秒后執(zhí)行任務,并且每隔3秒執(zhí)行一次
scheduledThreadPool.scheduleAtFixedRate(new RunnableTask(), 2, 3, TimeUnit.SECONDS);
// 延遲2秒后執(zhí)行任務,任務執(zhí)行完成后,再延遲3秒執(zhí)行下一次任務
scheduledThreadPool.scheduleWithFixedDelay(new RunnableTask(), 2, 3, TimeUnit.SECONDS);
// 關閉線程池
scheduledThreadPool.shutdown();
}
static class RunnableTask implements Runnable {
@Override
public void run() {
System.out.println("Task is running. Thread: " + Thread.currentThread().getName());
}
}
}在上面的例子中,我們創(chuàng)建了一個大小為3的 ScheduledThreadPool ,并使用 schedule() 、 scheduleAtFixedRate() 和 scheduleWithFixedDelay() 方法來安排任務的執(zhí)行。
schedule() 方法用于延遲執(zhí)行一次任務, scheduleAtFixedRate() 和 scheduleWithFixedDelay() 方法用于周期性地執(zhí)行任務。
shutdown() 方法用于關閉線程池,不再接受新的任務提交,但會等待已經(jīng)提交的任務執(zhí)行完成。如果你希望立即停止所有任務并關閉線程池,可以使用 shutdownNow() 方法。
到此這篇關于Java的四種常見線程池及Scheduled定時線程池實現(xiàn)詳解的文章就介紹到這了,更多相關Java常見線程池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringMVC 使用JSR-303進行校驗 @Valid示例
本篇文章主要介紹了SpringMVC 使用JSR-303進行校驗 @Valid示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
解決idea spring boot 修改html等不重啟即時生效的問題
這篇文章主要介紹了解決idea spring boot 修改html等不重啟即時生效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
LeetCode?動態(tài)規(guī)劃之矩陣區(qū)域和詳情
這篇文章主要介紹了LeetCode?動態(tài)規(guī)劃之矩陣區(qū)域和詳情,文章基于Java的相關資料展開對LeetCode?動態(tài)規(guī)劃的詳細介紹,需要的小伙伴可以參考一下2022-04-04

