可能重复: ThreadPool和JobQueue
如果可能的话,我可以如何实现这些代码。
发布于 2012-11-02 09:29:11
您需要BlockingQueue为您的任务排队,ExecutorService需要工作人员来处理您的任务。
示例源代码:
final BlockingQueue<String> queue = new LinkedBlockingQueue<String>();
queue.put("test");// Add item here
ExecutorService service = Executors.newFixedThreadPool(10);// specifynumber
// of thread
int numWorkers = 10;
for (int i = 0; i < numWorkers; i++) {
service.submit(new Runnable() {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
String item = queue.take();
// Process item
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
break;
}
}
}
});
}解释:
管理器指定作业队列中的作业(队列大小不固定)。
声明一个阻塞队列,该队列将保存您的作业。String类型在这里表示作业。
final BlockingQueue<String> queue = new LinkedBlockingQueue<String>();线程由固定数量的ThreadPool维护。
使用ExecutorService和FixedThreadPool大小。
ExecutorService service = Executors.newFixedThreadPool(10);每当作业队列中有作业时,框架将线程从ThreadPool分配给作业。
使用put操作将作业提交到队列。
queue.put("test"); 使用阻塞的take()操作
queue.take();//When there is job it will return the value else will get block参考文献:
BlockingQueueExecutorService发布于 2012-11-02 09:32:34
我将使用ExecutorService来对任务进行排队,并管理线程池。
管理器指定作业队列中的作业(队列大小不固定)。
使用ExecutorService向submit(Runnable)提交任务以处理每个作业
线程由固定数量的ThreadPool维护。
Executors.newFixedThreadPool(n_threads)是一个固定大小的线程池。
每当作业队列中有作业时,框架将线程从ThreadPool分配给作业。
ExecutorService将在线程空闲时将作业分配给线程。
如果队列中没有作业,则线程需要等待作业到达。
没有任务的线程是空闲的,对资源几乎没有影响。
发布于 2012-11-02 09:25:16
如果您正在使用JDK 5或更高版本,请使用来自JDK的遗嘱执行人。您的作业是可调用接口的实现。ExecutorService是执行者的正面。
https://stackoverflow.com/questions/13192453
复制相似问题