私は学業をしなければならず、いくつかのコードを完成させましたが、いくつか質問があります:
java で Boss-Workers アプリケーションを作成する必要があります。
- 私はこれらのクラスを持っています:
Main WorkerThread BossThread Job
基本的に私がやりたいことは、それが a をBossThread
保持しBlockingQueue
、ワーカーがそこに行って を探すことですJobs
。
質問1:
現時点では 5WorkingThreads
と 1を開始しBossThread
ます。
主要:
Collection<WorkerThread> workers = new ArrayList<WorkerThread>();
for(int i = 1; i < 5; i++) {
WorkerThread worker = new WorkerThread();
workers.add(worker);
}
BossThread thread = new BossThread(jobs, workers);
thread.run();
ボススレッド:
private BlockingQueue<Job> queue = new ArrayBlockingQueue<Job>(100);
private Collection<WorkerThread> workers;
public BossThread(Set<Job> jobs, Collection<WorkerThread> workers) {
for(Job job : jobs) {
queue.add(job);
}
for(WorkerThread worker : workers) {
worker.setQueue(queue);
}
this.workers = workers;
}
これは正常ですか、それとも自分で作成する必要がありますWorkerThreads
かBossThread
?
質問2:
ご覧のとおり、キューを each に与えていますがWorkerThread
、それは合理的ですか、それともキューを 1 か所だけに保存できますか?
質問 3:
BossThread
ユーザーがキューにさらにものを追加するかどうかを待つために、何とか実行し続ける必要がありますか? そしてWorkerThreads
、キューからジョブを探すために、どのように実行し続けるのでしょうか?
全体的な提案や設計上の欠陥や提案はありますか?
public class WorkerThread implements Runnable {
private BlockingQueue<Job> queue;
public WorkerThread() {
}
public void run() {
try {
queue.take().start();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void setQueue(BlockingQueue<Job> queue) {
this.queue = queue;
}
}