欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
JDK1.5新特性--java.util.concurrent BlockingQue...

發(fā)庫中的BlockingQueue是一個(gè)比較好玩的類(lèi),顧名思義,就是阻塞隊列。該類(lèi)主要提供了兩個(gè)方法put()和take(),前者將一個(gè)對象放到隊列中,如果隊列已經(jīng)滿(mǎn)了,就等待直到有空閑節點(diǎn);后者從head取一個(gè)對象,如果沒(méi)有對象,就等待直到有可取的對象。

下面的例子比較簡(jiǎn)單,一個(gè)讀線(xiàn)程,用于將要處理的文件對象添加到阻塞隊列中,另外四個(gè)寫(xiě)線(xiàn)程用于取出文件對象,為了模擬寫(xiě)操作耗時(shí)長(cháng)的特點(diǎn),特讓線(xiàn)程睡眠一段隨機長(cháng)度的時(shí)間。另外,該Demo也使用到了線(xiàn)程池和原子整型(AtomicInteger),AtomicInteger可以在并發(fā)情況下達到原子化更新,避免使用了synchronized,而且性能非常高。由于阻塞隊列的put和take操作會(huì )阻塞,為了使線(xiàn)程退出,特在隊列中添加了一個(gè)“標識”,算法中也叫“哨兵”,當發(fā)現這個(gè)哨兵后,寫(xiě)線(xiàn)程就退出。

當然線(xiàn)程池也要顯式退出了。

package concurrent;
import java.io.File;
import java.io.FileFilter;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;

public class TestBlockingQueue {
  static long randomTime() {
    return (long) (Math.random() 1000);
  }

  public static void main(String[] args) {
    // 能容納100個(gè)文件
    final BlockingQueue<File> queue = new LinkedBlockingQueue<File>(100);
    // 線(xiàn)程池
    final ExecutorService exec = Executors.newFixedThreadPool(5);
    final File root = new File("F:\\JavaLib");
    // 完成標志
    final File exitFile = new File("");
    // 讀個(gè)數
    final AtomicInteger rc = new AtomicInteger();
    // 寫(xiě)個(gè)數
    final AtomicInteger wc = new AtomicInteger();
    // 讀線(xiàn)程
    Runnable read = new Runnable() {
      public void run() {
        scanFile(root);
        scanFile(exitFile);
      }

      public void scanFile(File file) {
        if (file.isDirectory()) {
          File[] files = file.listFiles(new FileFilter() {
            public boolean accept(File pathname) {
              return pathname.isDirectory()
                  || pathname.getPath().endsWith(".java");
            }
          });
          for (File one : files)
            scanFile(one);
        else {
          try {
            int index = rc.incrementAndGet();
            System.out.println("Read0: " + index + " "
                + file.getPath());
            queue.put(file);
          catch (InterruptedException e) {
          }
        }
      }
    };
    exec.submit(read);
    // 四個(gè)寫(xiě)線(xiàn)程
    for (int index = 0; index < 4; index++) {
      // write thread
      final int NO = index;
      Runnable write = new Runnable() {
        String threadName = "Write" + NO;
        public void run() {
          while (true) {
            try {
              Thread.sleep(randomTime());
              int index = wc.incrementAndGet();
              File file = queue.take();
              // 隊列已經(jīng)無(wú)對象
              if (file == exitFile) {
                // 再次添加"標志",以讓其他線(xiàn)程正常退出
                queue.put(exitFile);
                break;
              }
              System.out.println(threadName + ": " + index + " "
                  + file.getPath());
            catch (InterruptedException e) {
            }
          }
        }
      };
      exec.submit(write);
    }
    exec.shutdown();
  }
}
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java基于Callable、Future多線(xiàn)程搜索文件代碼
多線(xiàn)程+阻塞隊列實(shí)現生產(chǎn)者和消費者
如何實(shí)現漏桶算法與令牌桶算法
Java多線(xiàn)程
測試
java 原子量Atomic舉例(AtomicReference)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久