复制代码代码如下:
paket com.ysh.file;
impor java.util.arraylist;
impor java.util.linkedlist;
impor java.util.list;
impor java.util.concurrent.locks.condition;
impor java.util.concurrent.locks.lock;
impor java.util.concurrent.locks.reentrantlock;
impor com.google.common.collect.lists;
kelas publik writequeue {
private static final int max_queue_size = 10000;
Private LinkedList <String> queuecache = lists.newlinkedlist ();
kunci kunci pribadi = reentrantlock baru ();
kondisi pribadi penuh = lock.newcondition ();
kondisi pribadi kosong = lock.newcondition ();
private writequeue () {
}
kelas statis privat writqueueHolder {
Private Final Static Writequeue Instance = new writqueue ();
}
public static writequeue getInstance () {
return writequeueHolder.instance;
}
public void add (string line) {
lock.lock ();
mencoba {
while (queuecache.size ()> = max_queue_size) {
full.Await ();
}
queuecache.addfirst (baris);
kosong.signal ();
} catch (InterruptedException e) {
e.printstacktrace ();
} Akhirnya {
lock.unlock ();
}
}
public void add (daftar <string> linelist) {
lock.lock ();
mencoba {
while (queuecache.size ()> = max_queue_size) {
full.Await ();
}
queuecache.addall (linelist);
kosong.signal ();
} catch (InterruptedException e) {
e.printstacktrace ();
} Akhirnya {
lock.unlock ();
}
}
Public ArrayList <String> flush () {
ArrayList <String> temp = null;
lock.lock ();
mencoba {
while (queuecache.size () == 0) {
kosong.Await ();
}
temp = lists.newarraylist ();
temp.addall (queuecache);
queuecache.clear ();
full.signal ();
} catch (InterruptedException e) {
e.printstacktrace ();
} Akhirnya {
lock.unlock ();
}
kembalikan suhu;
}
}