我想以这样的方式实现Java并发API,即一次最多有4个并行线程在运行。但我应该能够将请求添加到池中,当数据/请求可用时,它将处理或维护一个队列。处理逻辑将实现FIFO,以便从池/队列中窥视请求。
例如,我有5个请求r1 ...r5。初始池将有5个请求,但它将处理r1到r3,其余将处于等待状态。一段时间后,我可以再添加3个请求r6 ...r8。如果1个请求仍在运行,则r6和r7将开始执行,r8将处于等待状态。
您能告诉我如何使用JDK 7并发API来实现这一点吗?
发布于 2014-12-12 18:55:00
1/将请求使用者实现为Runnable。让他们从先进先出队列中读取请求,比如ConcurrentLinkedQueue。
2/使用java.util.concurrent.Executors.newFixedThreadPool()启动想要的请求消费者数量。
3/维护池的一端将请求写入FIFO队列。
就这样。
发布于 2014-12-12 19:08:12
这就是创建固定线程池的目的。他们会帮你处理队列的。您可以使用Executors.newFixedThreadPool()或直接创建ThreadPoolExecutor来创建一个。当每个请求传入时,创建一个新的Runnable任务,该任务的run()方法处理该请求。使用execute()或submit()将此任务添加到您的执行器中。线程池将通过调用所有任务来工作,并且您可以在任何时候添加新任务(只要您还没有在执行器上调用shutdown() )。
https://stackoverflow.com/questions/27441232
复制相似问题