方法內部多執行緒呼叫區域性變數問題

2021-09-14 06:59:43 字數 1238 閱讀 3841

問題場景: 方法內部多執行緒呼叫內部區域性變數集合,併發寫入資料庫,集合執行緒間隔離(執行緒呼叫完畢就需要清空集合),資料不重複寫入問題

核心**片段:

class threadsync implements runnable

@override

public void run()

esrestclient.getesdtats(requestbody.tostring(), oldesurl, esrestclient.actions.post);

logger.info("es 寫入 sql:{} path:{}", requestbody.tostring(), oldesurl);

} catch (exception e)

}}

業務邏輯呼叫**分享

public void execute(string args) throws ioexception 

string line = it.nextline().replaceall(" +|\\t+", " ");

logger.debug("{}: {}", linecount, line);

string arr = stringutils.split(line, " ");

if (arr.length < 5)

if (!arr[1].matches("[a-za-z0-9]"))

if (!arr[2].matches("\\d"))

if (!arr[3].matches("[a-za-z0-9\\-]"))

if (!arr[arr.length - 1].matches("\\d"))

list.add(new relation(arr[1], arr[2], arr[3], arr[arr.length - 1], rowkeyutils.convertrowkeytostr(2 + arr[3] + arr[2] + arr[1] + arr[arr.length - 1])));

if (list.size() >= 100000)

}if (!list.isempty())

} finally 行,用時:{}!", linecount, total, utils.prettytime(system.currenttimemillis() - l));

lineiterator.closequietly(it);

}}

多執行緒 多執行緒共享區域性變數的方法

1.操作相同時,寫乙個 runnable 實現類,內部設定成員變數,run 方法修改該變數,將該runnable傳給不同thread使用 2.操作不同時,在thread呼叫類例項化乙個資料例項,傳遞給不同runnable處理,再把不同的runnable傳給不同thread使用 3.在thread呼叫...

多執行緒 執行緒內區域性變數

該類提供了執行緒內區域性 thread local 變數。好比有兩個視窗 兩個執行緒 乙個視窗可以拿飲料,乙個視窗可以拿食物。現在有多個人要來拿東西,如果在飲料視窗有的人拿到了飲料,有的人拿到了不該拿的食物,就說明執行緒之間出現了混亂,我們應當避免這種情況出現。以下 就可能會出現執行緒混亂的問題 p...

ThreadLocal執行緒區域性變數 多執行緒與高併發

threadlocal執行緒區域性變數,實現了將物件變數儲存在特定的執行緒物件中,僅對當前執行緒可見。我們在測試程式中,乙個執行緒往threadlocal物件中放置物件,然後另乙個物件來取物件取不到。public class testthreadlocal catch interruptedexce...