复制代码代码如下:
パッケージcom.ysh.file;
java.util.arraylistをインポートします。
java.util.linkedListをインポートします。
java.util.listをインポートします。
java.util.concurrent.locks.conditionをインポートします。
java.util.concurrent.locks.lockをインポートします。
java.util.concurrent.locks.reentrantlockをインポートします。
com.google.common.collect.listsをインポートします。
パブリッククラスの書き込み{
Private Static Final int max_queue_size = 10000;
private linkedlist <string> queecache = lists.newlinkedlist();
プライベートロックlock = new ReentrantLock();
プライベート条件full = lock.newcondition();
プライベート条件EMPTY = LOCK.NEWCONDITION();
privateWriteQueue(){
}
private static class writequeueuholder {
プライベート最終static writequeueインスタンス= new WriteQueue();
}
public static writequeue getInstance(){
return writequeueuholder.instance;
}
public void add(string line){
lock.lock();
試す {
while(queuecache.size()> = max_queue_size){
full.await();
}
queecache.addfirst(line);
empty.signal();
} catch(arternedexception e){
e.printstacktrace();
} ついに {
lock.unlock();
}
}
public void add(list <string> linelist){
lock.lock();
試す {
while(queuecache.size()> = max_queue_size){
full.await();
}
queecache.addall(linelist);
empty.signal();
} catch(arternedexception e){
e.printstacktrace();
} ついに {
lock.unlock();
}
}
publicArrayList <String> flush(){
arrayList <string> temp = null;
lock.lock();
試す {
while(queecache.size()== 0){
empty.await();
}
temp = lists.newarraylist();
Temp.Addall(Queuecache);
queecache.clear();
full.signal();
} catch(arternedexception e){
e.printstacktrace();
} ついに {
lock.unlock();
}
return temp;
}
}