所以我有输入线程和处理线程。输入线程获取文件,解析它们并将它们放在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时,是否有一种简单的方法可以暂停输入线程的执行?我查找了同步块和等待/睡眠指令,但我无法使其中任何一个工作。
谢谢!
答案 0 :(得分:1)
是的,使用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()