如何在java中并行运行 2个任务?

How to run 2 tasks in parallel in java?

我有 2 个任务,任务 A 和任务 B。 Task-A 有一个 return 类型的 ResultSet 并且 return 一次从 DB 获取 1000 行。这个任务是 运行 10 次,因为数据库有 10,000 行(还要考虑数据库中总行数未知的情况)。 Task-B 有 void return 类型并且只是做 Sysout。我需要将 Task-A 编辑的前 1000 行 return 传递给 Task-B,并且当 Task-B 对这些行进行操作时,我希望 Task-A 并行地 运行 以便通过当任务 B 完成对前 1000 条记录的操作时,下一组 1000 条记录应该由任务 A 编辑 return。 请告诉我如何在 java 中完成此操作。如果可能,任何代码片段都会有所帮助。 谢谢

我同意@Chris K,这里的关键是使用阻塞队列,我尝试编写一个高级解决方案:Task-A 的 DBThread 和 Task-B 的 PrinterThread,以及 ResultSet 的阻塞队列,它在两个线程之间共享:

class DBThread extends Thread {
   private BlockingQueue<ResultSet> resultSets;
   public DBThread(BlockingQueue<ResultSet> resultSets) {
      this.resultSets = resultSets;
   }

   public void run() {
      try {
         resultSets.put(getResultsFromDB());  //resultSets.put() call will block if the queue is full
      } catch (InterruptedException e) {
         e.printStackTrace();
      }
   }

   private ResultSet getResultsFromDB() {
      ResultSet resultSet = fromDB();   //some method to get ResultSet from DB
      return resultSet;
   }
}

class PrinterThread extends Thread  {
   private BlockingQueue<ResultSet> resultSets;
   public PrinterThread(BlockingQueue<ResultSet> resultSets) {
      this.resultSets = resultSets;
   }

   public void run() {
      try {
         printLogs(resultSets.take());  //resultSets.take() call will block if the queue is empty
      } catch (InterruptedException e) {
         e.printStackTrace();
      }
   }

   private void printLogs(ResultSet resultSet) {
      //print rows
   }
}

class Main {

   public static void main(String[] args) {
      BlockingQueue<ResultSet> resultSets = new LinkedBlockingQueue<>(10);
      DBThread dbThread = new DBThread(resultSets);
      PrinterThread printerThread = new PrinterThread(resultSets);
      dbThread.start();
      printerThread.start();
   }
}