复制代码代码如下:
แพ็คเกจ 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 int สุดท้ายส่วนตัว max_queue_size = 10,000;
LinkedList ส่วนตัว <String> queUecache = lists.newlinkedList ();
ล็อคส่วนตัว = ใหม่ reentrantlock ();
เงื่อนไขส่วนตัวเต็ม = lock.newCondition ();
สภาพส่วนตัวว่างเปล่า = lock.newCondition ();
Private WriteQueue () {
-
คลาสคงที่คลาสส่วนตัว WriteQueueHolder {
อินสแตนซ์ WriteQueue คงสุดท้ายส่วนตัว = new writeQueue ();
-
Public Static WriteQueue GetInstance () {
Return WritequeueHolder.instance;
-
โมฆะสาธารณะเพิ่ม (สายสตริง) {
lock.lock ();
พยายาม {
ในขณะที่ (queuecache.size ()> = max_queue_size) {
full.await ();
-
queUecache.addfirst (บรรทัด);
ว่างเปล่า signal ();
} catch (interruptedException e) {
E.PrintStackTrace ();
} ในที่สุด {
lock.unlock ();
-
-
โมฆะสาธารณะเพิ่ม (รายการ <String> linelist) {
lock.lock ();
พยายาม {
ในขณะที่ (queuecache.size ()> = max_queue_size) {
full.await ();
-
queuecache.addall (linelist);
ว่างเปล่า signal ();
} catch (interruptedException e) {
E.PrintStackTrace ();
} ในที่สุด {
lock.unlock ();
-
-
Public ArrayList <String> Flush () {
arrayList <String> temp = null;
lock.lock ();
พยายาม {
ในขณะที่ (queuecache.size () == 0) {
ว่างเปล่า Aawait ();
-
temp = lists.newarraylist ();
temp.addall (queuecache);
queUecache.Clear ();
full.signal ();
} catch (interruptedException e) {
E.PrintStackTrace ();
} ในที่สุด {
lock.unlock ();
-
กลับอุณหภูมิ;
-
-