多个线程和单个主对象变量

时间:2017-09-27 08:46:00

标签: java multithreading synchronization

我有一个变量,我在这个循环中创建了几个线程

        ExecutorService service = Executors.newFixedThreadPool(nThreads);
        int start = 0;  
        while(nThreads > 0) {
        nThreads--;
        service.execute(new Runnable() {

            @Override
            public void run() {

            }
        });
      }

现在我希望每个线程都使用value start变量来创建自己的变量,这样thread1就会读取它并让它说100,而线程2只在thread1进行更改时读取它,依此类推。读取值后,一个线程对其变量所做的任何更改都不应影响其他线程的变量。

我该怎么做?

最初的问题是我有500条记录需要获取,我想将工作分成不同的线程。我马上只能获取50条记录。现在我想使用thread1获取前150个记录,然后使用线程2获取下一个150,依此类推。我有关于主线程中有多少总记录的信息(比如变量totalRecords)。

现在我需要发送每个线程有关一个线程应该获取的开始记录号和记录数的信息。我该怎么做?

1 个答案:

答案 0 :(得分:0)

    for ( int currentRecord = 0; currentRecord < totalRecords; currentRecord += 150 ) {
      final int startRecord = currentRecord;
      final int endRecord = startRecord + 150;

      service.execute(new Runnable() {

        @Override
        public void run() {
          for ( int r = startRecord; r < endRecord && r < totalRecords; r++ ) {
            // Process record no. r
          }
        }
      });
   }