Job
代表需要被程序执行的一个任务,其实例状态描述:
new:初始化一个新job
ready:job已经被提交到job引擎(job任务线程池),但还在等待被执行
running:job引擎已经将一个job执行起来
finished:job引擎已经成功执行完一个job
canceled:job引擎执行一个job过程中,将其取消执行
Job 引擎设计
1、启动job引擎
初始化一个线程池执行器实例
运行job引擎
启动一个新线程执行对job的操作,该线程一直运行于系统。获取新job并创建新任务;处理提交新任务到 job引擎上和更 新job状态
2、判断job引擎是否正在运行
3、关闭job引擎
4、提交一个job实例到job引擎
5、从job引擎中取消一个job实例
6、从job引擎中移除一个job实例
public class JobEngine { private RunnableThreadPoolExecutor executor; private ReentrantLock locker = new ReentrantLock(); private Condition condition = locker.newCondition(); public void start() { executor = new RunnableThreadPoolExecutor(2, 4, 500, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(4)); run(); } public void run() { new Thread(new Runnable() { public void run() { while(true) { try { sleep(1000); executor.submit(new TaskRunnable(UUID.randomUUID().toString())); } catch (RejectedExecutionException e) { locker.lock(); try { System.out.println("thread pool rejected"); condition.await(); } catch (InterruptedException ie) { } finally { locker.unlock(); } } } } }).start(); } public void notifyFetch() { locker.lock(); try { System.out.println("notify signal"); condition.signal(); } finally { locker.unlock(); } } private void sleep(long millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { } } private class RunnableThreadPoolExecutor extends ThreadPoolExecutor { @Override protected void beforeExecute(Thread t, Runnable r) { super.beforeExecute(t, r); } @Override protected void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); notifyFetch(); } @Override protected void terminated() { super.terminated(); } public RunnableThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); } public RunnableThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); } public RunnableThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory); } public RunnableThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler handler) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, handler); } } private class TaskRunnable implements Runnable { private String name; public TaskRunnable(String name) { this.name = name; } public void run() { System.out.println(name + "task run!"); } } public static void main(String[] args) { JobEngine engine = new JobEngine(); engine.start(); }}