复制代码代码如下:
包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;
公共类写入{
私有静态最终int max_queue_size = 10000;
private linkedlist <string> queuecache = lists.newlinkedlist();
私有锁定= new Reentrantlock();
私有条件full = lock.newcondition();
私有条件为空= lock.newcondition();
私有写(){
}
私人静态类Writequeuholder {
私有最终静态写入实例= new writequeue();
}
public static writequeue getinstance(){
返回writequeueholder.intance;
}
public void add(字符串线){
lock.lock();
尝试 {
while(queuecache.size()> = max_queue_size){
full.await();
}
queuecache.addfirst(line);
kument.signal();
} catch(InterruptedException e){
e.printstacktrace();
} 最后 {
lock.unlock();
}
}
public void add(list <string> linelist){
lock.lock();
尝试 {
while(queuecache.size()> = max_queue_size){
full.await();
}
queuecache.addall(Linelist);
kument.signal();
} catch(InterruptedException e){
e.printstacktrace();
} 最后 {
lock.unlock();
}
}
public arraylist <string> flush(){
arraylist <string> temp = null;
lock.lock();
尝试 {
while(queuecache.size()== 0){
empty.await();
}
temp = lists.newarraylist();
temp.addall(queuecache);
queuecache.clear();
full.signal();
} catch(InterruptedException e){
e.printstacktrace();
} 最后 {
lock.unlock();
}
返回温度;
}
}