日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java线程池newSingleThreadExecutor newFixedThreadPool newCachedThreadPool newScheduledThreadPool

發布時間:2024/4/15 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java线程池newSingleThreadExecutor newFixedThreadPool newCachedThreadPool newScheduledThreadPool 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java線程池newSingleThreadExecutor newFixedThreadPool newCachedThreadPool newScheduledThreadPool

一、線程池的理解 ? ? ??線程池是預先創建線程的一種技術,線程池在還沒有任務到來之前,事先創建一定數量的線程,放入空閑隊列中,然后對這些資源進行復用,從而減少頻繁的創建和銷毀對象。 ? ? ? 系統啟動一個新線程的成本是比較高的,因為它涉及與操作系統交互。在這種情形下,使用線程池可以很好地提高性能,尤其是當程序中需要創建大量生存期很短暫的線程時,更應該考慮使用線程池。
? ? ?與數據庫連接池類似的是,線程池在系統啟動時即創建大量空閑的線程,程序將一個Runnable 對象或Callable 對象傳給線程池,線程池就會啟動一個線程來執行它們的run()或call()方法, 當run()或call()方法執行結束后, 該線程并不會死亡,而是再次返回線程池中成為空閑狀態,等待執行下一個Runnable對象的run()或call()方法。
? ? ?由于系統創建和銷毀線程都是需要時間和系統資源開銷,為了提高性能,才考慮使用線程池。線程池會在系統啟動時就創建大量的空閑線程,然后等待新的線程調用,線程執行結束并不會銷毀,而是重新進入線程池,等待再次被調用。這樣子就可以減少系統創建啟動和銷毀線程的時間,提高系統的性能。

二、線程池的使用 ? ? ??Jdk 1.5版本以上提供了現成的線程池。Java里面線程池的頂級接口是Executor, 是一個執行線程的工具。線程池接口是ExecutorService。在Executor類里面提供了一些靜態工廠,生成一些常用的錢程池:
? ? ?newSingleThreadExecutor:創建一個單線程的線程池。這個線程池只有一個線程在工作,也就是相當于單線程串行執行所有任務。如果這個唯一的線程因為異常結束,那么會有一個新的線程替代它。此線程池保證所有任務的執行順序按照任務的提交順序執行。
? ? ?newFixedThreadPool:創建固定大小的線程池,每次提交一個任務就創建一個線程,直到線程達到線程池的最大大小。線程池的大小一旦達到是大值就會保持不變。如果某個線程因為執行異常而結束,那么線程池會補充一個新線程。
? ? ?newCachedThreadPool:創建一個可緩存的線程池. 如果線程池的大小超過了處理任務所需要的線程,那么就會回收部分空閑(60秒不執行任務)的線程。當任務數增加時,此線程池又可以智能的添加新線程來處理任務。此線程池不會對錢程池大小做限制,線程池大小完全依賴于操作系統(或者說JVM) 能夠創建的最大線程大小。
? ??newScheduledThreadPool:創建一個大小無限的線程池。此線程池支持定時以及周期性執行任務的需求。
package javatest2;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class javatest2 {public static void main(String[] args) {// 創建一個單線程的線程池// ExecutorService es = Executors.newSingleThreadExecutor();// 創建一個固定大小的線程池// ExecutorService es = Executors.newFixedThreadPool(2);// 創建一個可緩存的線程池//ExecutorService es = Executors.newCachedThreadPool();// 創建一個大小無限的線程池ExecutorService es = Executors.newScheduledThreadPool(2);MyThread my1 = new MyThread();// 線程1es.execute(my1);MyThread my2 = new MyThread();// 線程2es.execute(my2);}}class MyThread implements Runnable {@Overridepublic void run() {for (int i = 0; i < 5; i++) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("MyThread:" + i);}} }

? ? ?注意使用線程池時,Eclipse運行時,下圖中會顯示的紅框點,因為線程池中的線程并沒有因為空閑而被銷毀,而普通線程執行完后就銷毀了。

尊重原創,轉載請注明出處http://blog.csdn.net/guyuealian/article/details/51706310

總結

以上是生活随笔為你收集整理的Java线程池newSingleThreadExecutor newFixedThreadPool newCachedThreadPool newScheduledThreadPool的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。