我的問題是,我有一個1000條記錄的數據集。我想要3個線程處理這樣的數據, 從記錄1到300的線程1,從301到600的線程2等等。一個線程可以發出請求並一次獲取50條記錄,創建一個對象並將其放入隊列中。主線程將同時從隊列中讀取數據。主線消費者和其他線程的生產者
下面是代碼,我面對的問題是,recordRead變量告訴線程應該從哪裏開始讀取記錄的起點。 但我怎麼能爲每個線程設置不同的值,例如對於thread1,它應該是0,recordsToRead應該是300,對於thread2,recordRead應該是300,recordsToRead是300 + 300 = 600,最後一個線程應該是600,結束。 pagesize = 50 pagesize,recordRead和recordToRead是屬於主類和主線程的所有變量。
ExecutorService service = Executors.newFixedThreadPool(nThreads);
while(nThreads > 0) {
nThreads--;
service.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
do {
int respCode = 0;
int RecordsToRead = div;
JSONObject jsObj = new JSONObject();
jsObj.put("pagesize", pageSize);
jsObj.put("start", recordsRead);
jsObj.put("searchinternalid", searchInternalId);
try {
boolean status = req.invoke(jsObj);
respCode = req.getResponseCode();
} catch (Exception e) {
req.reset();
e.printStackTrace();
return true;
}
JSONObject jsResp = req.getResponseJson();
//here jsResp will be added to ArrayBlockingQueue.
req.reset();
}while(!isError && !isMaxLimit && recordsRead < RecordsToRead);
}
});
}
此循環將是主線程讀取隊列的代碼。 如何爲所有線程設置recordsRead和recordToread。
以及如何使主線程等待,直到一個線程插入隊列中的對象。
您可以創建'Runnable'的子類作爲類ctor參數的起始位置(以及其他)。 –