// important: objects passed as data must not be altered once put into a job
public class JobQueue {
- private List jobs;
+ private Vector jobs;
private Map dataToJob;
public static final int STATUS_PENDING = 0;
}
}
- public class Job {
+ public List makeJobListSnapshot() {
+ synchronized (jobs) {
+ return (List) jobs.clone();
+ }
+ }
+
+ public class Job implements Cloneable {
private Object data;
private int status;
- private int identifier;
- public Job(Object aData) {
+ public Job(Object aData, int aStatus) {
data = aData;
- status = STATUS_PENDING;
+ status = aStatus;
+ }
+
+ public Job(Object aData) {
+ this(aData, STATUS_PENDING);
}
public Object getData() {
}
}
- public boolean setProcessing() {
+ protected boolean setProcessing() {
return setStatus(STATUS_PENDING, STATUS_PROCESSING);
}
- public void setProcessed() {
+ protected void setProcessed() {
setStatus(STATUS_PROCESSING, STATUS_PROCESSED);
}
return getStatus() == STATUS_PROCESSED;
}
+ public boolean isProcessing() {
+ return getStatus() == STATUS_PROCESSING;
+ }
+
public boolean isPending() {
return getStatus() == STATUS_PENDING;
}
}
}
+ protected Object clone() {
+ synchronized(this) {
+ return new Job(data, status);
+ }
+ }
}
}