我必须做功课,我已经完成了一些代码,但有一些问题:
必须在 java 中创建一个 boss-workers 应用程序。
- 我有这些课程:
Main WorkerThread BossThread Job
基本上我想做的是,BossThread
持有 aBlockingQueue
并且工人去那里寻找Jobs
.
问题一:
目前我开始 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:
如您所见,我将队列分配给每个人WorkerThread
,这是合理的还是我只能将队列存储在一个地方?
问题 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;
}
}