我的问题是,我有一个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参数的起始位置(以及其他)。 –