这是一门功课。我正在尝试创建点对点线程模型:
http://www.informit.com/articles/article.aspx?p=169479&seqNum=5
在委托模型有一个将任务委托给工作线程的老板线程的情况下,在对等模型中,所有线程都具有相同的工作状态。尽管有一个线程最初创建执行所有任务所需的所有线程,但该线程被视为工作线程并且不进行委托。在这个模型中,没有集中式线程。
因此,我的主线程将创建 5 个线程,它们开始监听我的队列并使用主线程创建作业 10 秒。而且由于所有线程都必须执行任务,因此该线程还必须等待作业。我怎样才能做到这一点?
BlockingQueue<Job> queue = new ArrayBlockingQueue<Job>(1000);
Collection<Thread> workers = new ArrayList<Thread>();
for(int i = 0; i < 5; i++) {
Thread thread = new Thread(new Worker(queue));
workers.add(thread);
thread.start();
}
long endTime = System.currentTimeMillis() + 10000;
Random r = new Random();
while(System.currentTimeMillis() < endTime) {
try {
CalculateJob job = new CalculateJob(r.nextInt(50), r.nextInt(50), r.nextInt(50));
queue.put(job);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
所以我的主线程将与创建线程一起工作,而工作人员只是坐在queue.take()
.
我是否正确理解在点对点模型中,每个线程都必须queue.take()
或等待作业。如果是这样,我该怎么做?有什么建议么?