源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java多线程读写文件示例

  • 时间:2020-04-29 06:14 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java多线程读写文件示例
[u]复制代码[/u] 代码如下:
package com.ysh.file; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import com.google.common.collect.Lists; public class WriteQueue {  private static final int MAX_QUEUE_SIZE = 10000;  private LinkedList<String> queueCache = Lists.newLinkedList();  private Lock lock = new ReentrantLock();  private Condition full = lock.newCondition();  private Condition empty = lock.newCondition();  private WriteQueue() {  }  private static class WriteQueueHolder {   private final static WriteQueue INSTANCE = new WriteQueue();  }  public static WriteQueue getInstance() {   return WriteQueueHolder.INSTANCE;  }  public void add(String line) {   lock.lock();   try {    while (queueCache.size() >= MAX_QUEUE_SIZE) {     full.await();    }    queueCache.addFirst(line);    empty.signal();   } catch (InterruptedException e) {    e.printStackTrace();   } finally {    lock.unlock();   }  }  public void add(List<String> lineList) {   lock.lock();   try {    while (queueCache.size() >= MAX_QUEUE_SIZE) {     full.await();    }    queueCache.addAll(lineList);    empty.signal();   } catch (InterruptedException e) {    e.printStackTrace();   } finally {    lock.unlock();   }  }  public ArrayList<String> flush() {   ArrayList<String> temp = null;   lock.lock();   try {    while (queueCache.size() == 0) {     empty.await();    }    temp = Lists.newArrayList();    temp.addAll(queueCache);    queueCache.clear();    full.signal();   } catch (InterruptedException e) {    e.printStackTrace();   } finally {    lock.unlock();   }   return temp;  } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部