[Java]实现“只运行一次”逻辑的工具类

项目地址 https://github.com/legendmohe/RunOnce

RunOnce

实现“只运行一次”逻辑的工具类

使用例子

public class Main {
 
    public static void main(String[] args) {
        // 下面演示的是利用RunOnce工具,实现在TestContext指定的生命周期内,只运行一些逻辑一次
 
        TestContext context = new TestContext();
        System.out.println("====new context====");
 
        // 下面只会打印一次"abc running"
        runOnce("abc", context);
        runOnce("abc", context);
 
        // 回收RunOnce对context的引用
        context.triggerDestroy();
 
        // 已经destroy,不会打印
        runOnce("abc", context);
        runOnce("bcd", context);
 
        // 重新开始
        context.reset();
        System.out.println("====reset context====");
 
        // 下面只会各打印一次"abc running"、"bcd running"
        runOnce("abc", context);
        runOnce("bcd", context);
        runOnce("abc", context);
        runOnce("bcd", context);
    }
 
    /*
    执行体
     */
    private static void runOnce(String tag, TestContext context) {
        RunOnce.from(context).run(tag, new Runnable() {
            @Override
            public void run() {
                System.out.println(tag + " running");
            }
        });
    }
 
    /**
     * RunOnce的Context实现
     */
    private static class TestContext implements RunOnce.Context {
 
        // 用于通知上下文的结束事件,即onDestroy发生
        private RunOnce.Binder mBinder = new RunOnce.DefaultBinder();
 
        private boolean mIsDestroy;
 
        public void triggerDestroy() {
            mIsDestroy = true;
            mBinder.notifyDestroy();
        }
 
        @Override
        public RunOnce.Binder getRunOnceBinder() {
            return mBinder;
        }
 
        @Override
        public boolean isRunOnceContextDestroy() {
            return mIsDestroy;
        }
 
        public void reset() {
            mIsDestroy = false;
        }
    }
 
}

原文 

http://legendmohe.net/2019/04/17/java实现只运行一次逻辑的工具类/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » [Java]实现“只运行一次”逻辑的工具类

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址