真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java線程池的匹配文件數(shù)量計(jì)算方法是什么

這篇文章主要講解了“java線程池的匹配文件數(shù)量計(jì)算方法是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java線程池的匹配文件數(shù)量計(jì)算方法是什么”吧!

十年的平陰網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整平陰建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“平陰網(wǎng)站設(shè)計(jì)”,“平陰網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

構(gòu)建一個(gè)新的線程的代價(jià)還是有些高的,因?yàn)樗婕芭c操作系統(tǒng)的交互。如果你的程序創(chuàng)建了大量生存期很短的線程,那就應(yīng)該使用線程池。一個(gè)線程池包含大量準(zhǔn)備運(yùn)行的空閑線程。你將一個(gè)Runnable對(duì)象給線程池,線程池中的一個(gè)線程就會(huì)調(diào)用run方法。當(dāng)run方法退出時(shí),線程不會(huì)死亡,而是繼續(xù)在池中準(zhǔn)備為下一個(gè)請(qǐng)求提供服務(wù)。

執(zhí)行器(Executor)類有大量用來構(gòu)建線程池的靜態(tài)工廠方法,下表給出了一個(gè)總結(jié)。

 方法描述 
 newCachedThreadPool在需要時(shí)創(chuàng)建新線程:空閑線程會(huì)被保留60秒 
 newFixedThreadPool 池包含固定數(shù)量的線程;空閑線程會(huì)一直被保留
 newSingleThreadExecutor 只有一個(gè)線程的“池”,這個(gè)線程順序執(zhí)行每一個(gè)遞交上來的任務(wù)
 newScheduledThreadPool 為預(yù)定執(zhí)行而構(gòu)建的固定線程池
 newSingleThreadScheduledExecutor 為預(yù)定執(zhí)行而構(gòu)建的單線程“池”

newCachedThreadPool、newFixedThreadPool和newSingleThreadExecutor這三個(gè)方法返回ThreadPoolExecutor類(這個(gè)類實(shí)現(xiàn)了ExecutorService接口)對(duì)象。

向線程池提交任務(wù)的方法為:將一個(gè)實(shí)現(xiàn)Runnable或Callable接口的對(duì)象提交給ExecutorService:

Future submit(Runable task)   Future submit(Runable task, T result)   Future submit(Callable task)

線程池會(huì)在適當(dāng)?shù)臅r(shí)候盡早執(zhí)行提交的任務(wù),調(diào)用submit時(shí)會(huì)返回一個(gè)Future對(duì)象,用以查詢?cè)撊蝿?wù)的狀態(tài),或者取消該任務(wù)。

***個(gè)submit方法提交一個(gè)Runable對(duì)象返回一個(gè)Future,可使用該對(duì)象調(diào)用isDone、cancel、或者isCancelled來查詢?nèi)蝿?wù)狀態(tài)。但是此Future對(duì)象的get方法在任務(wù)完成的時(shí)候知識(shí)簡單的返回null;

第二個(gè)版本的submit方法同樣提交一個(gè)Runable對(duì)象,并且返回Future的get方法在任務(wù)完成的時(shí)候返回傳入的result對(duì)象;

第三個(gè)submit方法提交一個(gè)Callable對(duì)象,并且返回的Future對(duì)象將在計(jì)算結(jié)構(gòu)、準(zhǔn)備好的時(shí)候得到它。

當(dāng)想要注銷一個(gè)線程池,可調(diào)用shutdown方法,該方法啟動(dòng)該線程池的關(guān)閉序列。此時(shí)線程池并不是馬上就壯烈犧牲了線程也沒了,而是等待所以任務(wù)都完成以后,線程池中的線程才會(huì)死亡,被關(guān)閉的執(zhí)行器不再接受新任務(wù)。也可以調(diào)用shutdownNow,此時(shí)線程池會(huì)取消正在排隊(duì)等待處理的任務(wù)并且試圖中斷正在執(zhí)行的線程。

下面總結(jié)了在使用連接池時(shí)應(yīng)該做的事:

  1. 調(diào)用Executor類中靜態(tài)的newCachedThreadPool或newFixedThreadPool方法。

  2. 調(diào)用submit來提交一個(gè)Runnable或Callable對(duì)象。

  3. 如果希望能夠取消任務(wù)或如果提交了一個(gè)Callable對(duì)象,那就保存好返回的Future對(duì)象。

  4. 當(dāng)不想再提交任何任務(wù)時(shí)調(diào)用shutdown。

除了常規(guī)的計(jì)算匹配文件數(shù)量外,這個(gè)程序打印出執(zhí)行過程中池中的***線程數(shù)量。但從ExecutorService接口不能得到這個(gè)信息。因此,我們必須將pool對(duì)象轉(zhuǎn)型成一個(gè)ThreadPoolExecutor類對(duì)象。

import java.io.*;  import java.util.*;  import java.util.concurrent.*;   public class ThreadPoolTest  {     public static void main(String[] args) throws Exception     {        Scanner in = new Scanner(System.in);        System.out.print("Enter base directory (e.g. /usr/local/jdk5.0/src): ");        String directory = in.nextLine();        System.out.print("Enter keyword (e.g. volatile): ");        String keyword = in.nextLine();         ExecutorService pool = Executors.newCachedThreadPool();         MatchCounter counter = new MatchCounter(new File(directory), keyword, pool);        Future result = pool.submit(counter);         try       {           System.out.println(result.get() + " matching files.");        }        catch (ExecutionException e)        {           e.printStackTrace();        }        catch (InterruptedException e)        {        }        pool.shutdown();         int largestPoolSize = ((ThreadPoolExecutor) pool).getLargestPoolSize();        System.out.println("largest pool size=" + largestPoolSize);     }  }   /**   * This task counts the files in a directory and its subdirectories that contain a given keyword.   */ class MatchCounter implements Callable  {     /**      * Constructs a MatchCounter.      * @param directory the directory in which to start the search      * @param keyword the keyword to look for      * @param pool the thread pool for submitting subtasks      */    public MatchCounter(File directory, String keyword, ExecutorService pool)     {        this.directory = directory;        this.keyword = keyword;        this.pool = pool;     }      public Integer call()     {        count = 0;        try       {           File[] files = directory.listFiles();           ArrayList> results = new ArrayList>();            for (File file : files)              if (file.isDirectory())              {                 MatchCounter counter = new MatchCounter(file, keyword, pool);                 Future result = pool.submit(counter);                 results.add(result);              }              else             {                 if (search(file)) count++;              }            for (Future result : results)              try             {                 count += result.get();              }              catch (ExecutionException e)              {                 e.printStackTrace();              }        }        catch (InterruptedException e)        {        }        return count;     }      /**      * Searches a file for a given keyword.      * @param file the file to search      * @return true if the keyword is contained in the file      */    public boolean search(File file)     {        try       {           Scanner in = new Scanner(new FileInputStream(file));           boolean found = false;           while (!found && in.hasNextLine())           {              String line = in.nextLine();              if (line.contains(keyword)) found = true;           }           in.close();           return found;        }        catch (IOException e)        {           return false;        }     }      private File directory;     private String keyword;     private ExecutorService pool;     private int count;  }

感謝各位的閱讀,以上就是“java線程池的匹配文件數(shù)量計(jì)算方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)java線程池的匹配文件數(shù)量計(jì)算方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


新聞名稱:java線程池的匹配文件數(shù)量計(jì)算方法是什么
本文鏈接:http://weahome.cn/article/jioscd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部