我正在实施一个执行并行处理的Java应用程序: 当我的应用程序启动时,将创建属于线程池的4个线程。 然后,我开始接收添加到 LinkedBlockingQueue 的对象。每个对象都有一个ID,根据ID,执行预定义的任务。我的“队列消费者”是那些被初始化的4个线程,他们开始将对象从队列中取出,并执行与每个对象相对应的任务。
可以定义在哪个Thread中处理每个对象?我想“为每个线程安排任务”。
例如:
我该如何实现?
由于
答案 0 :(得分:0)
您可以为每个单独的线程创建一个队列,而不是一个队列和一个线程池。当然,您必须自己管理所有这些或使用软件包。
答案 1 :(得分:0)
让所有线程都有自己的队列。您可以实现一个新的线程,如MainThread
或DispatcherThread
,它会从LinkedBlockingQueue
中获取对象,并决定处理它的WorkerThread
。类似的东西:
private void decideQueue(String objectId) { // actually decides which thread to process it.
Queue queue = getQueueIfObjectIdPreviouslyUsed(objectId);
if (queue == null) {
queue = getNextAvailableQueue();
}
queue.enqueue();
//..
//don't forget to dequeue from the main queue
//..
}
要确定是否先前已处理onjectId,您可以使用Map
将objectId保持为关键字并将Queue
关联为值。并且您使用getQueueIfObjectIdPreviouslyUsed
方法执行必要的工作。