私は10人の労働者と、以下の二つの方法の一覧のコードを持っている:消費者や労働者のパターン
public void demoDeques() {
int maxSizeOfJobDeque = 3;
Producer producer = new ProducerImpl(maxSizeOfJobDeque);
Logger.debug("WorkFlowEngineImpl : " +
"Creating Workers and adding them to allocator");
List<Worker> workerList = buildWorkerList(producer);
Logger.debug("WorkFlowEngineImpl : " +
"Assigning some jobs to the workers. " +
"The workers have not been started yet");
for (int i=1; i<4; i++) {
producer.assign(new JobImpl("job " + i, i));
try {
Thread.sleep(4000);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
Logger.debug("WorkFlowEngineImpl : " + "Starting the workers");
startWorkersAndWait5Seconds(workerList);
Logger.debug("WorkFlowEngineImpl : " +
"Assigning some more jobs to the " +
"started workers");
for (int i=4; i<7; i++) {
producer.assign(new JobImpl("Job " + i, i));
try {
Thread.sleep(4000);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
Logger.debug("WorkFlowEngineImpl : " + "Assigning More Jobs");
for (int i=7; i<11; i++) {
producer.assign(new JobImpl("job" + i, i));
try {
Thread.sleep(4000);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
プロデューサー:
public synchronized void assign(Job job) {
Set<Worker> workerSet = jobMap.keySet();
LinkedBlockingDeque<Job> jobQueue;
StringBuffer sb;
for (Worker worker : workerSet) {
jobQueue = jobMap.get(worker);
sb = new StringBuffer();
sb.append("Assigning job ");
sb.append(job.getJobNumber());
sb.append(" to ");
sb.append(worker);
sb.append("'s jobs Deque");
Logger.debug("Producer : " + sb.toString());
if (! jobQueue.offerFirst(job)) {
jobQueue.pollLast();
jobQueue.offerFirst(job);
}
}
}
私は私が持っているように、2つの方法を変更しようとしていますアロケータは100のジョブのリストを有し、100人に達するまで時間がたつにつれて10人の作業者のそれぞれに最大3つのジョブが与えられるように割り当てる。すなわち、 6になるので、10人の作業者に到達すると、3人の作業を割り当てた作業者1に戻って、100番目の作業に達するまで停止し、すべてのジョブが割り当てられていることを警告します。助けを借りて助けてください。
何らかの順序でコードを入手してください。それは解析さえしない。 –
あなたは、その特定の操作命令を望むことについて、もう少し説明することはできますか? ExecutorServiceを使用してジョブを処理するだけの理由は何ですか? – Gray
@Grayはい宿題の問題です。私は、労働者を通して、また職場を通して何らかのループを作り出すと思っていました。私を「ExecutorService」の方向にうまく行き渡らせるには、優先順位はありません。 – CCharles