import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
public class SyncTaskExecutor {
private Logger logger = Logger.getLogger(SyncTaskExecutor.class);
private BlockingQueue<SyncTask> syncTaskQueue;
private ExecutorService threadPool;
private WorkingThread workingThread;
public SyncTaskExecutor() {
syncTaskQueue = new ArrayBlockingQueue<SyncTask>(100);
threadPool = Executors.newFixedThreadPool(8);
workingThread = new WorkingThread();
}
public SyncTaskExecutor(ExecutorService threadPool){
syncTaskQueue = new ArrayBlockingQueue<SyncTask>(100);
this.threadPool = threadPool;
workingThread = new WorkingThread();
}
public void addTask(SyncTask task){
try {
syncTaskQueue.put(task);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
class WorkingThread extends Thread{
@Override
public void run() {
while(true){
SyncTask syncTask;
try {
logger.info("executing a task!");
syncTask = syncTaskQueue.take();
threadPool.execute(syncTask);
} catch (InterruptedException e) {
}
}
}
}
public void start() {
workingThread.start();
logger.info("SyncTaskExecutor start!");
}
public void shutdown() {
workingThread.interrupt();
logger.info("SyncTaskExecutor shutdown!");
}
public static void main(String[] args) throws InterruptedException {
SyncTaskExecutor executor = new SyncTaskExecutor();
executor.start();
SyncTask task = new DefaultSyncTask();
List<String> syncUrlList = new ArrayList<String>();
syncUrlList.add("http://localhost:8080/PublishSystem/publish/db.sql");
syncUrlList.add("http://localhost:8080/PublishSystem/publish/test.txt");
task.setSyncUrlList(syncUrlList);
executor.addTask(task);
Thread.currentThread().sleep(5000);
executor.shutdown();
}
}
使用BlockingQueue实现一个发布和同步的TaskExecutor