package com.task;import java.lang.Runnable;/** * * @author jiangl * */public class Executer extends Thread {private ITask task;private ExecuterQueue target;private boolean running = false;public Executer(ExecuterQueue target) {this.target = target;}public void process(ITask task) {this.task = task;synchronized (this) {this.notify(); // 恢复线程}}public boolean getIsRunning() {return this.running;}public void setIsRunning(boolean boo) {this.running = boo;}@Overridepublic void run() {try {while (true) {if (task == null || !this.getIsRunning()) {synchronized (this) {try {//System.out.println("Executer.class wait()");this.wait();} catch (InterruptedException e) {e.printStackTrace();}}}task.execute();//执行if ((task = target.getLastTask().poll()) != null) {//System.out.println("get old task");continue;}target.finishTask(this);}} catch (Exception e) {e.printStackTrace();}}}
package com.task;import com.util.StringUtil;/** * 执行器线程池管理器 * @author jiangl * */public class ExecuterManager {private static ExecuterQueue queue = null;public ExecuterManager(){}/** * * @param isdaemon 执行器内的执行器(线程)是否为守护线程 */public static void init(boolean isdaemon){queue = new ExecuterQueue(5, isdaemon, StringUtil.SYSTEM);}public static void process(ITask task){try {queue.process(task);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
package com;import com.task.ITask;public class DemoTask implements ITask {private String msg;public DemoTask(String msg){this.msg = msg;}@Overridepublic void execute() {System.out.println(">>>("+msg+")>>>Thread:>>>" + Thread.currentThread().getName());}}
package com;import com.task.ExecuterManager;/** * * @author jiangl * */public class TestTask {/** * @param args * @throws InterruptedException */public static void main(String[] args) throws InterruptedException {ExecuterManager.init(false);DemoTask task = null;for (int i = 0; i < 3000000; i++) {task = new DemoTask("test" + i);ExecuterManager.process(task);}}}
下载地址点击打开链接