我的问题是 我有1000条记录的数据。我想要3个处理这些数据的线程 thread1从记录1到300,thread2从301到600,依此类推。一个线程可以发出请求并一次获取50条记录并创建一个对象并将其放入队列中。 主线程将同时从队列中读取数据。 我怎样才能做到这一点。 我是线程新手。 我需要一些代码示例。 下面是代码,我面临的问题是recordRead变量告诉线程应该从哪里开始读取记录。 但是我如何为每个线程设置不同的值,例如对于thread1,它应该是0,recordsToRead应该是300,对于thread2,recordRead应该是300,而recordToRead应该是300 + 300 = 600,对于最后一个线程,它应该是600并且最多结束。 页大小= 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。