乙個簡單的 Java 自動批處理佇列

2021-07-29 09:55:41 字數 649 閱讀 3257

實際中可能有這樣的應用場景,得到乙個記錄不需要立即去處理它,而是等累積到一定數量時再批量處理它們。我們可以用乙個計數器,來乙個加乙個,量大時一塊處理,然後又重零開始計數。如果記錄的**單一還好辦,要是有多個資料來源來提供記錄就會有多執行緒環境下資料丟失的問題。

這裡我編寫了乙個最簡單的任務批處理的佇列,構造了告訴它批處理數量,消費者,然後就只管往佇列裡新增記錄,佇列在滿足條件時自動進行批處理。因為內部使用的是blockingquque來儲存記錄,所以多執行緒往裡同時新增記錄也沒關係,最後的未達到batchsize, 的那些記錄可主動呼叫completeall()函式或在達到 timeout 後來觸發批處理,並且結束佇列內的迴圈執行緒。

注意: 多執行緒環境下往乙個無線程保護的集合或結構中,如 arraylist, linkedlist, hashmap, stringbuilder 中新增記錄非常容易造成資料的丟失,而往有執行緒保護的目的地寫東西就安全了,如 vector, hashtable, stringbuffer, blockingqueue。當然效能上要付出一點代價,不過對於使用了可重入鎖(reentrantlock), 而非同步鎖(synchronized) 的資料結構還是可以放心使用的。

下面是 batchqueue 的簡單實現 閱讀全文 >>

寫乙個簡單的批處理(bat)

看了看以前寫的總結,發現有這樣的乙個批處理,還是挺有意思。拿出來分享一下。1 for d i in do 2 rem set day ti 3 cd i 4 for j in do 5 echo j j 6 set file1 dp0 i j 7 echo dp0 i j 8 set file2 c...

乙個檔案處理的批處理

目錄c dat 有三個這樣的檔案,2008a.txt,2009b.txt,2008c.txt,其中2008是代表年份,可變的,後面的檔名不可變 我想實現這樣的操作 1.把dat下面所有的檔案的年份取出來,寫到year.txt檔案中,a 2008 b 2009 c 2008 2。然後把檔名的年份去掉變...

乙個啟動apache的批處理

1.建立乙個 服務名 txt 檔案。2.服務名 txt 用以批處理開始服務,寫入如下命令 echo off net start 子服務名 net start 子服務名 net start 子服務名 3.儲存後,將檔案後續名改為 bat 4.再新建立乙個 服務名 txt檔案,用以批處理停止服務,寫入如...