国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

基于線程池的匹配文件數量計算

開發 后端
構建一個新的線程的代價還是有些高的,因為它涉及與操作系統的交互。如果你的程序創建了大量生存期很短的線程,那就應該使用線程池。一個線程池包含大量準備運行的空閑線程。你將一個Runnable對象給線程池,線程池中的一個線程就會調用run方法。當run方法退出時,線程不會死亡,而是繼續在池中準備為下一個請求提供服務。

構建一個新的線程的代價還是有些高的,因為它涉及與操作系統的交互。如果你的程序創建了大量生存期很短的線程,那就應該使用線程池。一個線程池包含大量準備運行的空閑線程。你將一個Runnable對象給線程池,線程池中的一個線程就會調用run方法。當run方法退出時,線程不會死亡,而是繼續在池中準備為下一個請求提供服務。

執行器(Executor)類有大量用來構建線程池的靜態工廠方法,下表給出了一個總結。

 方法 描述 
 newCachedThreadPool 在需要時創建新線程:空閑線程會被保留60秒 
 newFixedThreadPool  池包含固定數量的線程;空閑線程會一直被保留
 newSingleThreadExecutor  只有一個線程的“池”,這個線程順序執行每一個遞交上來的任務
 newScheduledThreadPool  為預定執行而構建的固定線程池
 newSingleThreadScheduledExecutor  為預定執行而構建的單線程“池”

newCachedThreadPool、newFixedThreadPool和newSingleThreadExecutor這三個方法返回ThreadPoolExecutor類(這個類實現了ExecutorService接口)對象。

向線程池提交任務的方法為:將一個實現Runnable或Callable接口的對象提交給ExecutorService:

  1. Future<?> submit(Runable task)  
  2.  
  3. Future<T> submit(Runable task, T result)  
  4.  
  5. Future<t> submit(Callable<T> task) 

線程池會在適當的時候盡早執行提交的任務,調用submit時會返回一個Future對象,用以查詢該任務的狀態,或者取消該任務。

***個submit方法提交一個Runable對象返回一個Future<?>,可使用該對象調用isDone、cancel、或者isCancelled來查詢任務狀態。但是此Future對象的get方法在任務完成的時候知識簡單的返回null;

第二個版本的submit方法同樣提交一個Runable對象,并且返回Future的get方法在任務完成的時候返回傳入的result對象;

第三個submit方法提交一個Callable對象,并且返回的Future對象將在計算結構、準備好的時候得到它。

當想要注銷一個線程池,可調用shutdown方法,該方法啟動該線程池的關閉序列。此時線程池并不是馬上就壯烈犧牲了線程也沒了,而是等待所以任務都完成以后,線程池中的線程才會死亡,被關閉的執行器不再接受新任務。也可以調用shutdownNow,此時線程池會取消正在排隊等待處理的任務并且試圖中斷正在執行的線程。

下面總結了在使用連接池時應該做的事:

  1. 調用Executor類中靜態的newCachedThreadPool或newFixedThreadPool方法。
  2. 調用submit來提交一個Runnable或Callable對象。
  3. 如果希望能夠取消任務或如果提交了一個Callable對象,那就保存好返回的Future對象。
  4. 當不想再提交任何任務時調用shutdown。

除了常規的計算匹配文件數量外,這個程序打印出執行過程中池中的***線程數量。但從ExecutorService接口不能得到這個信息。因此,我們必須將pool對象轉型成一個ThreadPoolExecutor類對象。

  1. import java.io.*;  
  2. import java.util.*;  
  3. import java.util.concurrent.*;  
  4.  
  5. public class ThreadPoolTest  
  6. {  
  7.    public static void main(String[] args) throws Exception  
  8.    {  
  9.       Scanner in = new Scanner(System.in);  
  10.       System.out.print("Enter base directory (e.g. /usr/local/jdk5.0/src): ");  
  11.       String directory = in.nextLine();  
  12.       System.out.print("Enter keyword (e.g. volatile): ");  
  13.       String keyword = in.nextLine();  
  14.  
  15.       ExecutorService pool = Executors.newCachedThreadPool();  
  16.  
  17.       MatchCounter counter = new MatchCounter(new File(directory), keyword, pool);  
  18.       Future<Integer> result = pool.submit(counter);  
  19.  
  20.       try 
  21.       {  
  22.          System.out.println(result.get() + " matching files.");  
  23.       }  
  24.       catch (ExecutionException e)  
  25.       {  
  26.          e.printStackTrace();  
  27.       }  
  28.       catch (InterruptedException e)  
  29.       {  
  30.       }  
  31.       pool.shutdown();  
  32.  
  33.       int largestPoolSize = ((ThreadPoolExecutor) pool).getLargestPoolSize();  
  34.       System.out.println("largest pool size=" + largestPoolSize);  
  35.    }  
  36. }  
  37.  
  38. /**  
  39.  * This task counts the files in a directory and its subdirectories that contain a given keyword.  
  40.  */ 
  41. class MatchCounter implements Callable<Integer>  
  42. {  
  43.    /**  
  44.     * Constructs a MatchCounter.  
  45.     * @param directory the directory in which to start the search  
  46.     * @param keyword the keyword to look for  
  47.     * @param pool the thread pool for submitting subtasks  
  48.     */ 
  49.    public MatchCounter(File directory, String keyword, ExecutorService pool)  
  50.    {  
  51.       this.directory = directory;  
  52.       this.keyword = keyword;  
  53.       this.pool = pool;  
  54.    }  
  55.  
  56.    public Integer call()  
  57.    {  
  58.       count = 0;  
  59.       try 
  60.       {  
  61.          File[] files = directory.listFiles();  
  62.          ArrayList<Future<Integer>> results = new ArrayList<Future<Integer>>();  
  63.  
  64.          for (File file : files)  
  65.             if (file.isDirectory())  
  66.             {  
  67.                MatchCounter counter = new MatchCounter(file, keyword, pool);  
  68.                Future<Integer> result = pool.submit(counter);  
  69.                results.add(result);  
  70.             }  
  71.             else 
  72.             {  
  73.                if (search(file)) count++;  
  74.             }  
  75.  
  76.          for (Future<Integer> result : results)  
  77.             try 
  78.             {  
  79.                count += result.get();  
  80.             }  
  81.             catch (ExecutionException e)  
  82.             {  
  83.                e.printStackTrace();  
  84.             }  
  85.       }  
  86.       catch (InterruptedException e)  
  87.       {  
  88.       }  
  89.       return count;  
  90.    }  
  91.  
  92.    /**  
  93.     * Searches a file for a given keyword.  
  94.     * @param file the file to search  
  95.     * @return true if the keyword is contained in the file  
  96.     */ 
  97.    public boolean search(File file)  
  98.    {  
  99.       try 
  100.       {  
  101.          Scanner in = new Scanner(new FileInputStream(file));  
  102.          boolean found = false;  
  103.          while (!found && in.hasNextLine())  
  104.          {  
  105.             String line = in.nextLine();  
  106.             if (line.contains(keyword)) found = true;  
  107.          }  
  108.          in.close();  
  109.          return found;  
  110.       }  
  111.       catch (IOException e)  
  112.       {  
  113.          return false;  
  114.       }  
  115.    }  
  116.  
  117.    private File directory;  
  118.    private String keyword;  
  119.    private ExecutorService pool;  
  120.    private int count;  

原文鏈接:http://www.cnblogs.com/XL-Liang/archive/2012/06/13/2548327.html

責任編輯:林師授 來源: frogong的博客
相關推薦

2015-07-22 18:07:59

阿里云批量計算

2017-11-27 08:38:10

UPS選擇容量

2018-08-15 09:13:27

布線系統線纜用量

2009-08-21 10:50:42

電線電纜材料用量

2025-06-11 04:00:00

增量計算Lamda架構

2024-01-16 10:45:31

C++語言代碼

2021-03-01 15:55:17

Go惡意軟件勒索軟件

2015-05-04 14:46:49

2017-01-06 11:18:58

星瑞格

2018-02-28 16:20:57

中科睿芯

2019-06-06 10:19:33

谷歌開源計算庫

2025-06-05 11:49:59

OpenAI深度學習模型

2010-12-23 09:46:03

UNIXSSH

2018-01-24 09:27:30

文本分類工具fastText

2024-03-04 09:55:11

開源模型訓練

2016-12-06 15:40:08

海量計算星瑞格

2021-09-23 15:55:50

線程池語言公式
點贊
收藏

51CTO技術棧公眾號

国产日韩在线一区| 亚洲图片在区色| 青青免费在线视频| 在线观看www91| 2018av在线| 欧美人成在线视频| 日韩超碰人人爽人人做人人添| 国产精品极品美女在线观看免费| 中文精品久久| 欧美日韩精品免费观看视一区二区| 日本欧美一区二区| 国产xxxxx在线观看| 日韩欧美亚洲国产一区| yellow字幕网在线| 成人午夜两性视频| 国产九九在线观看| 91精品啪在线观看国产81旧版| 国产精品久久久久久久久久新婚| 亚洲免费精品| 北条麻妃视频在线| 日韩一区二区在线看片| 成人激情诱惑| 狠狠躁狠狠躁视频专区| 欧美tk丨vk视频| 亚洲午夜精品一区 二区 三区| 9色porny| 亚洲另类欧美自拍| 欧美日韩国产精品一区二区亚洲| 男人日女人的bb| 日韩欧美国产系列| 国产欧美在线| а天堂中文在线官网| 国产不卡在线观看| 亚洲综合网站在线观看| 免费福利视频一区| 91精品久久久久久久久久| 91免费视频网| 992tv在线观看| 国产精品每日更新在线播放网址 | 女生裸体视频网站免费观看| 国产精品素人视频| 99reav2| 亚洲综合中文| 久久综合伊人77777| 香蕉视频国产精品 | 亚洲一区二区三区小说| 91chinesevideo永久地址| 色综合天天综合狠狠| 日本成人在线播放| 欧美一级二级三级九九九| 久久久91精品国产一区不卡| 久久久天堂av| 精品176极品一区| 福利视频免费在线观看| 18久久久久久| 久久99热这里只有精品| 国模吧无码一区二区三区| 久久国产亚洲| 亚洲一区二区三区乱码| 中文字幕视频在线免费欧美日韩综合在线看 | 黄色小网站91| 操人视频在线观看欧美| 国产sm精品调教视频网站| 1024视频在线| 宅男噜噜99国产精品观看免费| 亚洲高清免费观看高清完整版| 日韩av中文在线观看| av亚洲一区二区三区| 欧美一区二区视频在线播放| 欧美精彩一区二区三区| 欧美精品一区二区三区在线四季 | 三级资源在线| 国产精品免费成人| 日本高清不卡三区| 久久精品中文字幕一区| 女人抽搐喷水高潮国产精品| 亚欧黄色av| 99er在线视频| 国产区精品视频| 日韩精品一区二区三区四区| 欧美精品一二三| 亚洲精品国产一区二区精华液| 亚洲在线黄色| 精品国产亚洲日本| 国精产品999国精产品官网| 国产美女久久久| 亚洲v精品v日韩v欧美v专区| 66国产精品| 色综合视频一区二区三区日韩| 男同在线观看| 高清一区在线观看| 亚洲欧美电影在线观看| 国产91色在线|| 亚洲精品美女免费| 亚洲香蕉伊在人在线观| 校花撩起jk露出白色内裤国产精品 | 美女一区二区在线观看| 自拍偷拍21p| 亚洲午夜精品久久久中文影院av| 欧美孕妇孕交黑巨大网站| 欧美一区二区三区在线视频| 亚洲一区二区中文在线| 日韩三级免费观看| 日韩精品一区二区三区第95| 91精品国产麻豆| 日韩欧美国产成人| 国产成人久久777777| 欧美亚洲黄色片| 日本h片在线观看| 大胆av不用播放器在线播放 | 成人在线视频一区二区| 免费中文字幕日韩欧美| 香蕉视频官网在线观看日本一区二区| 一级欧美视频| 天天干在线视频论坛| 日本最黄视频| 综合激情丁香| 三级黄色网址| 在线视频观看你懂的| 亚洲男人天堂| 超碰在线免费播放| 欧美激情二区| 日本护士...精品国| 日本在线免费观看视频| 亚洲男男gay视频| 666av成人影院在线观看| 国内精品国语自产拍在线观看| 91九色蝌蚪成人| 欧美一区免费视频| 亚洲成熟丰满熟妇高潮xxxxx| 在线视频网站| 免费在线性爱视频| 国产黄色在线免费观看| 99爱在线观看| 精品国产一级| 欧美日韩国产精品一区二区亚洲| 伊人成年综合电影网| 日韩精品久久理论片| 男人的天堂亚洲在线| 成人精品亚洲人成在线| 夜夜夜精品看看| 日韩一区二区三区在线视频| 精品国产欧美一区二区五十路| 2024亚洲男人天堂| 国产一级黄色录像片| 日韩精品一区中文字幕| 最后生还者第二季在线观看| 日本孕妇大胆孕交无码| 偷拍自拍亚洲色图| 日韩电影免费在线观看网站| 中文字幕成人在线观看| 狠狠久久亚洲欧美专区| 久久中文字幕在线视频| 欧美成熟毛茸茸复古| heyzo高清国产精品| 99久久国产综合精品女不卡| 91.麻豆视频| 欧美第一淫aaasss性| av成人午夜| 天天综合网天天做天天受| 麻豆视频在线观看免费| 日本三级久久| 久久麻豆一区二区| 亚洲国产美女久久久久| 亚洲午夜未删减在线观看 | 中文字幕日韩av综合精品| 午夜激情在线| 中文字幕在线不卡视频| 444亚洲人体| av在线无限看| 亚洲三级在线| 91麻豆精品在线观看| 成人免费视频网站入口| 国产在线一区不卡| 欧美日韩国产成人在线91| 成人网欧美在线视频| 国产最新视频在线| 亚洲精品在线二区| 91精品福利在线| 欧美激情网站在线观看| 久久综合中文色婷婷| 国产裸体免费无遮挡| 日韩精品一区二区三区中文字幕| 国产精品一页| 亚洲男人天堂av网| 国产亚洲精品久久久久久牛牛| 欧洲永久精品大片ww免费漫画| 日本成人在线不卡| h视频在线观看免费| 欧美日本一区| 欧美在线啊v一区| 国产a一区二区| 久操视频在线免费播放| 国产专区欧美精品| 不卡av日日日| 写真福利片hd在线观看| 国内国产精品久久| 国产精品嫩草视频| av毛片午夜不卡高**水| 欧美在线视频日韩|