45 lines
1001 B
Java
45 lines
1001 B
Java
package org.moparscape.msc.gs.util;
|
|
|
|
import java.util.concurrent.*;
|
|
|
|
import org.moparscape.msc.gs.model.Player;
|
|
|
|
|
|
/**
|
|
* The Worker class is a runnable class that can be used for splitting up a
|
|
* workload into multiple Workers.
|
|
* This class should only ever be used through a WorkGroup.
|
|
*/
|
|
public class Worker<E> implements Runnable {
|
|
private WorkGroup parent;
|
|
private BlockingQueue<Player> workload;
|
|
private Processor processor;
|
|
private boolean running = true;
|
|
|
|
public Worker(WorkGroup wg, BlockingQueue<Player> workload, Processor p) {
|
|
this.parent = wg;
|
|
this.workload = workload;
|
|
this.processor = p;
|
|
}
|
|
|
|
public void stop() {
|
|
running = false;
|
|
}
|
|
|
|
public void run() {
|
|
while(running) {
|
|
try {
|
|
if(parent.shouldProcess()) {
|
|
Player element = workload.take();
|
|
processor.process(element);
|
|
}
|
|
} catch(InterruptedException ie) {
|
|
//thread has been asked to stop
|
|
running = false;
|
|
} catch(Exception e) {
|
|
parent.addUncaughtException(e);
|
|
}
|
|
}
|
|
}
|
|
}
|