博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于ThreadPoolExecutor实现工作引擎参考
阅读量:7081 次
发布时间:2019-06-28

本文共 4258 字,大约阅读时间需要 14 分钟。

  hot3.png

Job

代表需要被程序执行的一个任务,其实例状态描述:

new:初始化一个新job

readyjob已经被提交到job引擎(job任务线程池),但还在等待被执行

runningjob引擎已经将一个job执行起来

finishedjob引擎已经成功执行完一个job

canceledjob引擎执行一个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();    }}

转载于:https://my.oschina.net/rksi5/blog/205899

你可能感兴趣的文章
如今,收入最高编程语言资料汇总!看到就是赚到哦!
查看>>
参数使用小技巧
查看>>
2019年成为优秀的Java开发人员的10个技巧
查看>>
MWeb集成七牛云图床服务、上传图片
查看>>
创业新机:朋友圈广告位大改,“解刨”小程序的真正价值
查看>>
小猿圈web前端之JavaScript放大镜效果
查看>>
奇点大学人工智能专家:人造智能大脑已接近现实
查看>>
Python学习笔记 - 环境搭建
查看>>
大数据算法:kNN算法
查看>>
静态路由实验题
查看>>
简单理解Ajax原理
查看>>
Delphi XE2 之 FireMonkey 入门(18) - TLang(多语言切换的实现)
查看>>
学用 ASP.Net 之 System.DateTime 结构
查看>>
我的友情链接
查看>>
互联网枭雄点评之周鸿祎 - 不甘老去的互联网老兵
查看>>
PKI_IOS证书加密L2L ×××
查看>>
web基础
查看>>
Apache和Nginx的区别
查看>>
2017.5.23 MS Power BI workshop for partner
查看>>
翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 8 章:列表操作...
查看>>