2017-09-27 24 views
-1

我有一个变量,我在循环创建几根线头这样多个线程和一个主要对象变量

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

      @Override 
      public void run() { 

      } 
     }); 
     } 

现在我想每一个线程使用的值开始变量来创建自己的变量,即线程1读取它使它说100,线程2只有在线程1进行更改时才读取它等等。读取值后,一个线程对其变量所做的任何更改都不应影响其他线程的变量。

我该怎么做?

原始问题是我有500条记录要取,我想将工作分成不同的线程。我一次只能获取50条记录。现在我想使用thread1获取前150条记录,然后使用thread 2获取下150条记录等等。我有关于主线程中有多少总记录的信息(比如说变量totalRecords)。

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

+1

目前尚不清楚你需要什么。请详细说明。 –

+0

我有500条记录,我想将工作分成不同的线程。我一次只能取50条记录。现在我想要使用线程2获取前150个记录,然后使用线程2获取150个记录等等。我有关于主线程中有多少个总记录的信息(比如说变量totalRecords)。现在我需要发送每个线程有关开始记录号和一个线程应该读取的记录数的信息。我该怎么做。 – SS94

+0

请阅读[在什么情况下,我可以添加“紧急”或其他类似的短语到我的问题,以获得更快的答案?](/ meta.stackoverflow.com/q/326569) - 总结是,这不是这是解决志愿者问题的理想方式,可能会对获得答案产生反作用。请不要将这添加到您的问题。 – halfer

回答

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 
      } 
     } 
     }); 
    } 
相关问题