這是一個功課。 我想創建對等網絡線程模型:Java點對點線程模式,大家等待工作
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()
或待業。如果是這樣,我該怎麼做?有什麼建議麼?
你已經回答了你的問題:) –
@AmitD是的,但是當我有我的「主」線程忙於創造新的就業機會並將它們添加到隊列中,我怎樣才能使用該線程完成作業? – Jaanus
一旦一個工作線程創建所有工作,它可以調用隊列上的take()。所以你的所有工作人員都在隊列中調用take(),以便它。 –