Java併發之執行緒池的學習

2021-08-10 04:37:16 字數 3377 閱讀 1820

相較執行緒,執行緒池的好處:

1、減少在建立和銷毀執行緒上所花的時間以及系統資源的開銷

2、可以重複利用執行緒池中已建立的執行緒

直接介紹常見的幾種執行緒池:

1、newfixedthreadpool(int nthreads) 建立乙個固定數量執行緒集合的執行緒池。新的執行緒加入後,如果正在執行的執行緒達到了上限,則會阻塞,直到有了空閒的執行緒來執行。

2、newscheduledthreadpool(int corepoolsize) 建立乙個可執行定時任務的執行緒池

3、newsinglethreadexecutor建立乙個只有乙個工作執行緒的執行緒池

4、newcachedthreadpool 建立乙個可快取的執行緒池 最大可建立integer.max_value個

關於幾種執行緒池的常見建立方式:

executorservice executorservice = executors.newfixedthreadpool(3);

executorservice executorservice = executors.newsinglethreadexecutor();

scheduledexecutorservice executor = executors.newscheduledthreadpool(2);

executorservice executorservice = executors.newcachedthreadpool();

executorservice的常用方法:

execute(runnable command) 執行指定的命令

shutdown() 將執行緒池中的執行緒執行完畢後 關閉執行緒池

submit(runnable task) 提交乙個 runnable 任務用於執行,並返回乙個表示該任務的 future

submit(callable task) 提交乙個帶返回值的任務用於執行,返回future

**演示:

public

static

void

main(string args) catch (interruptedexception e)

}});

executorservice.execute(new runnable() catch (interruptedexception e)

}});

executorservice.execute(new runnable() catch (interruptedexception e)

}});

executorservice.execute(new runnable() catch (interruptedexception e)

}});

executorservice.shutdown();

}

演示結果:

// 由於固定大小執行緒池,同時只能執行兩個執行緒,所以多餘的執行緒進入執行緒佇列,等待執行緒池中線程執行完畢。

進入執行緒4

進入執行緒2

執行緒2執行結束

執行緒4執行結束

進入執行緒3

進入執行緒1

執行緒3執行結束

執行緒1執行結束

演示只有乙個工作執行緒的執行緒池

public

static

void

main(string args) catch (interruptedexception e)

}});

executorservice.execute(new runnable() catch (interruptedexception e)

}});

executorservice.execute(new runnable() catch (interruptedexception e)

}});

executorservice.shutdown();

}

演示結果:

//這種單執行緒的執行緒池,newfixedthreadpool也能達到這種效果

進入執行緒4

執行緒4執行結束

進入執行緒2

執行緒2執行結束

進入執行緒3

執行緒3執行結束

進入執行緒1

執行緒1執行結束

演示可快取的執行緒池

public

static

void

main(string args) catch (interruptedexception e)

}});

executorservice.execute(new runnable() catch (interruptedexception e)

}});

executorservice.execute(new runnable() catch (interruptedexception e)

}});

executorservice.execute(new runnable() catch (interruptedexception e)

}});

executorservice.shutdown();

}

演示結果:

進入執行緒4

進入執行緒2

進入執行緒3

進入執行緒1

執行緒4執行結束

執行緒2執行結束

執行緒3執行結束

執行緒1執行結束

public

static

void

main(string args)

}, 2, timeunit.seconds);

executorservice.shutdown();

}

演示結果:

定時執行緒池

public

static

void

main(string args)

}, 2, 2, timeunit.seconds);

}

演示結果:

定時執行緒池

定時執行緒池

定時執行緒池

關於執行緒池呼叫callable的方法,在後續callable介紹的時候一併說!

以上若在描述時出現什麼錯誤,請大家指出來,謝謝!

Java併發之執行緒池學習筆記

juc包下有乙個重要的執行緒池的實現,大大優化方便了我們對執行緒的使用,而不再是傳統的new乙個thread。執行緒池相對傳統的直接建立執行緒主要有三個優點 1.統一管理執行緒,可以重用存在的執行緒,避免多次的建立 消亡的開銷,使得效能表現得更好 2.可以有效控制最大併發執行緒數,提高系統資源利用率...

java併發程式設計學習11 執行緒池

執行緒池 為了節省系統在多執行緒併發時不斷建立和銷毀執行緒帶來的額外開銷,就需要引入執行緒池。執行緒池的基本功能就是進行執行緒的復用。當系統接受一 個提交的任務時,並不會著急去建立乙個新的執行緒去執行這個任務,而是去執行緒池中查詢是否有空閒的執行緒。若有 直接使用這個執行緒。若沒有 根據配置的策略執...

JAVA併發訪問 執行緒池

1.前言 在乙個 jvm 裡建立太多的執行緒可能會導致系統由於過度消耗記憶體而用完記憶體或 切換過度 為了防止資源不足,伺服器應用程式需要一些辦法來限制任何給定時刻處理的請求數目。2.執行緒池的作用 執行緒池為執行緒生命週期開銷問題和資源不足問題提供了解決方案。通過對多個任務重用執行緒,執行緒建立的...