zoukankan      html  css  js  c++  java
  • 自定义的最简单的可回调的线程任务CallbackableFeatureTask(模仿google的ListenableFutureTask)

    1.使该Task继承Callable,Runable

    import java.util.concurrent.Callable;
    import java.util.function.Consumer;
    
    public class CallbackableFeatureTask<V> implements Callable<V>, Runnable {
    
        private Callable<V> mainProcess;
    
        private Consumer<V> callbackFunction;
    
        @Override
        public V call() throws Exception {
            V result = mainProcess.call();
            callbackFunction.accept(result);
            return result;
        }
    
        public CallbackableFeatureTask(Callable<V> callable, Consumer<V> callbackFunction) {
            this.mainProcess = callable;
            this.callbackFunction = callbackFunction;
        }
    
        @Override
        public void run() {
            try {
                call();
            } catch (Exception ex) {
    
            }
        }
    }

    2.测试代码

    public class CallbackableFeatureTaskTest {
        private static ExecutorService executorService = Executors.newFixedThreadPool(5);
    
        public static void main(String[] args) {
            CallbackableFeatureTask<String> task = new CallbackableFeatureTask<>(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    return "Hello China!";
                }
            }, (String v) -> {
                System.out.println(v);
            });
    
            // 1.支持直接使用线程的Runnable
            new Thread(task).start();
    
            //2.支持使用线程池的Callable
            Future<String> result = executorService.submit((Callable<String>) task);
            try {
                System.out.println("使用线程池返回结果是:" + result.get());
            } catch (Exception ex) {
    
            }
            executorService.shutdown();
       } 
    }

    结果如下:

    Hello China!
    Hello China!
    使用线程池返回结果是:Hello China!

    这里仅仅做一个教学Demo

    后期可以优化的点: 实现Future<V>接口,继承FutureTask 类等

  • 相关阅读:
    Spring-data-jpa 笔记(一)
    grpc详解 java版
    快速入门正则表达式
    异常的处理
    一位资深程序员大牛给予Java初学者的学习路线建议
    this用法
    静态代码块与非静态代码块
    类的成员变量--构造器
    Java并发机制及锁的实现原理
    JAVA内存模型
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/11725614.html
Copyright © 2011-2022 走看看