これは学業です。ピアツーピア スレッド モデルを作成しようとしています:
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()
がジョブを待機する必要があることを正しく理解していますか。もしそうなら、どうすればこれを行うことができますか? 助言がありますか?