复制代码代码如下:
пакет com.ysh.file;
импортировать java.util.arraylist;
импортировать java.util.linkedlist;
импортировать java.util.list;
Импорт java.util.concurrent.locks.condition;
импортировать java.util.concurrent.locks.lock;
Import java.util.concurrent.locks.reentrantlock;
Импорт com.google.common.collect.lists;
открытый класс writequeue {
Private Static Final int max_queue_size = 10000;
Private LinkedList <string> Queuecache = Lists.newlinkedList ();
Private Lock Lock = new Reentrantlock ();
частное условие полное = lock.newCondition ();
частное условие пустое = lock.newCondition ();
private writequeue () {
}
Частный статический класс writequeueuleder {
Частный финальный статический экземпляр writequeue = new writequeue ();
}
public static writequeue getInstance () {
return writequeueholder.instance;
}
public void add (строка строки) {
lock.lock ();
пытаться {
while (queuecache.size ()> = max_queue_size) {
Full.Await ();
}
queuecache.addfirst (line);
empty.signal ();
} catch (прерванная экспрессия e) {
e.printstacktrace ();
} окончательно {
lock.unlock ();
}
}
public void add (list <string> linelist) {
lock.lock ();
пытаться {
while (queuecache.size ()> = max_queue_size) {
Full.Await ();
}
queuecache.addall (линейлист);
empty.signal ();
} catch (прерванная экспрессия 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 (прерванная экспрессия e) {
e.printstacktrace ();
} окончательно {
lock.unlock ();
}
вернуть температуру;
}
}