Job类显示如下:
//Job.java
package train;
import java.io.*;
public class Job {
String mName;
String mDescr;
int mViews;
String mID;
PrintWriter mOut;
Thread mJobThread;
boolean mHasFailed = false;
//Sorry, no getters and setters to save space
public Job(String id) {
mID = id;
}
public void Marshall(){ // displays html page
mOut.println("<html><body>");
if(mHasFailed){
mOut.println("System error");
}else{
mOut.println("<p>ID: "+mID+"</p>");
mOut.println("<p>Name: "+mName+"</p>");
mOut.println("<p>Description: "+mDescr+"</p>");
mOut.println("<p>Views: "+mViews+"</p>");
}
mOut.println("</body></html>");
}
}
Job是一个纯粹的用户请求的代表。
marshall()方法在浏览器中显示信息。mJobThread成员是一个由WEB应用服务器创建执行请求的线程。
Dispatcher类是最重要的但也很简单:
//Dispatcher.java
package train;
import java.util.*;
public class Dispatcher
implements Runnable {
private List mCurrentJobBatch = new ArrayList(); //Batch container
private int mJobBatchMaxSize = 5; //Maximum number of the jobs in the batch
private int mIntervalTime = 50; //Maximum time to wait before batch execution
public synchronized void AddJob(Job job) {
mCurrentJobBatch.add(job);
if (mCurrentJobBatch.size() == mJobBatchMaxSize) {
ProcessJobBatch(); //If batch is full, execute
}
}
private synchronized void ProcessJobBatch() {
if (mCurrentJobBatch.size() == 0) { return; }
Worker worker = new Worker(mCurrentJobBatch);
Thread ht = new Thread(worker);
ht.start();
mCurrentJobBatch = new ArrayList();
}
public void run() {
try {
while (true) {
Thread.sleep(mIntervalTime);
ProcessJobBatch(); // Each mIntervalTime milliseconds execute batch
}
}
catch (InterruptedException ex) { }
}
}
