复制代码代码如下::
Paket com.ysh.file;
Import Java.util.ArrayList;
import Java.util.linkedList;
importieren 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;
öffentliche Klasse Writequeue {
private statische endgültige int max_queue_size = 10000;
private linkedList <string> queuecache = lists.NewlinkedList ();
Private Lock Lock = New Reentrantlock ();
privater Zustand full = lock.newcondition ();
privater Zustand leer = lock.newCondition ();
private writequeue () {
}
private statische Klasse WriteQueueholder {
Private Final Static WriteQueue Instance = New WriteQueue ();
}
public static writequeue getInstance () {
return writequeueholder.instance;
}
public void add (string line) {
lock.lock ();
versuchen {
while (queuecache.size ()> = max_queue_size) {
full.await ();
}
queuecache.addfirst (Zeile);
leer.Signal ();
} catch (InterruptedException e) {
E. printstacktrace ();
} Endlich {
lock.unlock ();
}
}
public void add (list <string> linelist) {
lock.lock ();
versuchen {
while (queuecache.size ()> = max_queue_size) {
full.await ();
}
queuecache.addall (Linelist);
leer.Signal ();
} catch (InterruptedException e) {
E. printstacktrace ();
} Endlich {
lock.unlock ();
}
}
public arrayList <string> flush () {
ArrayList <string> temp = null;
lock.lock ();
versuchen {
while (queuecache.size () == 0) {
leer.aait ();
}
temp = lists.newarrayList ();
temp.addall (Queucache);
queuecache.clear ();
full.signal ();
} catch (InterruptedException e) {
E. printstacktrace ();
} Endlich {
lock.unlock ();
}
Temperatur zurückgeben;
}
}