国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java中怎么搜索阻塞隊列

發(fā)布時(shí)間:2021-07-27 11:45 來(lái)源:億速云 閱讀:0 作者:Leah 欄目: 編程語(yǔ)言 歡迎投稿:712375056

本篇文章為大家展示了Java中怎么搜索阻塞隊列,內容簡(jiǎn)明扼要并且容易理解,絕對能使你眼前一亮,通過(guò)這篇文章的詳細介紹希望你能有所收獲。

  Java阻塞隊列怎么搜索

  java.util.concurrent包提供了阻塞隊列的4個(gè)變種:LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue和DelayQueue。我們用的是ArrayBlockingQueue。ArrayBlockingQueue在構造時(shí)需要給定容量,并可以選擇是否需要公平性。如果公平參數被設置了,等待時(shí)間最長(cháng)的線(xiàn)程會(huì )優(yōu)先得到處理。通常,公平性會(huì )使你在性能上付出代價(jià),只有在的確非常需要的時(shí)候再使用它。

  生產(chǎn)者線(xiàn)程枚舉在所有子目錄下的所有文件并把它們放到一個(gè)阻塞隊列中。這個(gè)操作很快,如果隊列沒(méi)有設上限的話(huà),很快它就包含了沒(méi)有找到的文件。

  我們同時(shí)還啟動(dòng)了大量的搜索線(xiàn)程。每個(gè)搜索線(xiàn)程從隊列中取出一個(gè)文件,打開(kāi)它,打印出包含關(guān)鍵字的所有行,然后取出下一個(gè)文件。我們使用了一個(gè)小技巧來(lái)在工作結束后終止線(xiàn)程。為了發(fā)出完成信號,枚舉線(xiàn)程把一個(gè)虛擬對象放入隊列。(這類(lèi)似于在行李輸送帶上放一個(gè)寫(xiě)著(zhù)“最后一個(gè)包”的虛擬包。)當搜索線(xiàn)程取到這個(gè)虛擬對象時(shí),就將其放回并終止。

  注意,這里不需要人任何顯示的線(xiàn)程同步。在這個(gè)程序中,我們使用隊列數據結構作為一種同步機制。

  Java阻塞隊列怎么搜索

  importjava.io.*;

  importjava.util.*;

  importjava.util.concurrent.*;

  publicclassBlockingQueueTest

  {

  publicstaticvoidmain(String[]args)

  {

  Scannerin=newScanner(System.in);

  System.out.print("Enterbasedirectory(e.g./usr/local/jdk1.6.0/src):");

  Stringdirectory=in.nextLine();

  System.out.print("Enterkeyword(e.g.volatile):");

  Stringkeyword=in.nextLine();

  finalintFILE_QUEUE_SIZE=10;

  finalintSEARCH_THREADS=100;

  BlockingQueuequeue=newArrayBlockingQueue(FILE_QUEUE_SIZE);

  FileEnumerationTaskenumerator=newFileEnumerationTask(queue,newFile(directory));

  newThread(enumerator).start();

  for(inti=1;i<=SEARCH_THREADS;i++)   newThread(newSearchTask(queue,keyword)).start();   }   }   /**   *Thistaskenumeratesallfilesinadirectoryanditssubdirectories.   */   classFileEnumerationTaskimplementsRunnable   {   /**   *ConstructsaFileEnumerationTask.   *@paramqueuetheblockingqueuetowhichtheenumeratedfilesareadded   *@paramstartingDirectorythedirectoryinwhichtostarttheenumeration   */   publicFileEnumerationTask(BlockingQueuequeue,FilestartingDirectory)

  {

  this.queue=queue;

  this.startingDirectory=startingDirectory;

  }

  publicvoidrun()

  {

  try

  {

  enumerate(startingDirectory);

  queue.put(DUMMY);

  }

  catch(InterruptedExceptione)

  {

  }

  }

  /**

  *Recursivelyenumeratesallfilesinagivendirectoryanditssubdirectories

  *@paramdirectorythedirectoryinwhichtostart

  */

  publicvoidenumerate(Filedirectory)throwsInterruptedException

  {

  File[]files=directory.listFiles();

  for(Filefile:files)

  {

  if(file.isDirectory())enumerate(file);

  elsequeue.put(file);

  }

  }

  publicstaticFileDUMMY=newFile("");

  privateBlockingQueuequeue;

  privateFilestartingDirectory;

  }

  /**

  *Thistasksearchesfilesforagivenkeyword.

  */

  classSearchTaskimplementsRunnable

  {

  /**

  *ConstructsaSearchTask.

  *@paramqueuethequeuefromwhichtotakefiles

  *@paramkeywordthekeywordtolookfor

  */

  publicSearchTask(BlockingQueuequeue,Stringkeyword)

  {

  this.queue=queue;

  this.keyword=keyword;

  }

  publicvoidrun()

  {

  try

  {

  booleandone=false;

  while(!done)

  {

  Filefile=queue.take();

  if(file==FileEnumerationTask.DUMMY)

  {

  queue.put(file);

  done=true;

  }

  elsesearch(file);

  }

  }

  catch(IOExceptione)

  {

  e.printStackTrace();

  }

  catch(InterruptedExceptione)

  {

  }

  }

  /**

  *Searchesafileforagivenkeywordandprintsallmatchinglines.

  *@paramfilethefiletosearch

  */

  publicvoidsearch(Filefile)throwsIOException

  {

  Scannerin=newScanner(newFileInputStream(file));

  intlineNumber=0;

  while(in.hasNextLine())

  {

  lineNumber++;

  Stringline=in.nextLine().trim();

  if(line.contains(keyword))System.out.printf("%s:%d%s%n",file.getPath(),lineNumber,line);

  }

  in.close();

  }

  privateBlockingQueuequeue;

  privateStringkeyword;

  }

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

亚洲AV网址在线| 色婷婷综合缴情综免费观看| 亚洲国产精品久久久久久无码| 国产a∨天天免费观看美女| 日本丰满少妇高潮呻吟| 色135综合网|