【问题标题】:Multiple threads and a single main object variable多个线程和一个主对象变量
【发布时间】:2017-09-27 08:45:59
【问题描述】:

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

        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 条记录。现在我想使用线程 1 获取前 150 条记录,然后使用线程 2 获取下 150 条记录,依此类推。我有关于主线程中有多少条记录的信息(比如变量 totalRecords)。

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

【问题讨论】:

  • 不清楚您需要什么。请详细说明。
  • 我有 500 条记录,我想将工作分配给不同的线程。一次我只能获取 50 条记录。现在我想使用线程 1 获取前 150 条记录,然后使用线程 2 获取下 150 条记录,依此类推。我有关于主线程中有多少总记录的信息(比如变量totalRecords)。现在我需要向每个线程发送有关开始记录数和一个线程应该获取的记录数的信息。我该怎么做。
  • 请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。

标签: java multithreading synchronization


【解决方案1】:
    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
          }
        }
      });
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多