复制代码代码如下:
حزمة 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 ؛
الطبقة العامة writequeue {
int static int int max_queue_size = 10000 ؛
LinkedList Private <string> queUecache = lists.newLinkedList () ؛
قفل قفل خاص = جديد reentrantlock () ؛
حالة خاصة كاملة = lock.newcondition () ؛
حالة خاصة فارغة = lock.newcondition () ؛
Private WriteQueue () {
}
حامل الفئة الثابتة الخاصة {
مثيل الكتابة الثابتة النهائي الخاص = new writequeue () ؛
}
public static static critequeue getInstance () {
Return writequeueholder.instance ؛
}
إضافة الفراغ العام (خط السلسلة) {
lock.lock () ؛
يحاول {
بينما (queuecache.size ()> = max_queue_size) {
full.await () ؛
}
QueUecache.addfirst (الخط) ؛
فارغة.
} catch (InterruptedException e) {
E.PrintStackTrace () ؛
} أخيراً {
lock.unlock () ؛
}
}
إضافة الفراغ العام (قائمة <Tring> linelist) {
lock.lock () ؛
يحاول {
بينما (queuecache.size ()> = max_queue_size) {
full.await () ؛
}
QueUecache.Addall (Linelist) ؛
فارغة.
} catch (InterruptedException e) {
E.PrintStackTrace () ؛
} أخيراً {
lock.unlock () ؛
}
}
ArrayList العام <string> flush () {
ArrayList <string> temp = null ؛
lock.lock () ؛
يحاول {
بينما (queuecache.size () == 0) {
فارغة.
}
temp = lists.newarrayList () ؛
temp.addall (QueUecache) ؛
QueUeCache.clear () ؛
full.signal () ؛
} catch (InterruptedException e) {
E.PrintStackTrace () ؛
} أخيراً {
lock.unlock () ؛
}
عودة درجة الحرارة.
}
}