所以我有输入线程和处理线程。输入线程获取文件,对其进行解析并将其放入JSON队列中。

public class inputThread extends Thread {
 public void run() {
  for(File f: inputFiles){
    parse();
    App.processingQueue.add(f);
  }
}


然后,处理线程轮询它们,并对其进行处理。

public class processingThread extends Thread {
  //Main loop
  while(!terminated){
    App.processingQueue.poll();
    process(...);
  }
}


当queue.size()大于x时,有没有一种简单的方法可以暂停输入线程的执行?我查找了同步块和等待/睡眠指令,但是我无法使它们正常工作。

谢谢!

最佳答案

是的,请使用BlockingQueue。参见此处:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html,那么您必须使用阻塞方法:put()和take()

例如:

int MAXIMUM_CAPACITY = 10;
BlockingQueue<File> blockingQueue = new ArrayBlockingQueue(MAXIMUM_CAPACITY);
blockingQueue.put(   )
blockingQueue.take()

关于java - Java,在不满足条件时暂停线程执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44630907/

10-11 17:39