几个线程将对象放入队列,主线程读取队列

时间:2017-09-26 18:27:17

标签: java multithreading synchronization

我的问题是 我有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。

0 个答案:

没有答案