zoukankan      html  css  js  c++  java
  • java 线程返回值

    1.传统方式需要新建一个接口类,然后在接口类中将结果在方法中作为参数进行处理

    package de.bvb.test3;
    
    public class Test3 {
        public static void main(String[] args) throws Exception {
    
            Thread t = new Thread(new MyRunnable(6, new Callback<Long>() {
    
                @Override
                public void handler(Long result) {
                    System.out.println(result);
                }
            }));
            t.start();
    
        }
    }
    
    interface Callback<T> {
        void handler(T result);
    }
    
    class MyRunnable implements Runnable {
        private long num;
        private Callback<Long> callback;
    
        public MyRunnable(long num, Callback<Long> callback) {
            super();
            this.num = num;
            this.callback = callback;
        }
    
        @Override
        public void run() {
            long result = -1l;
            if (num > 0) { // 计算阶乘
                result = 1;
                for (int i = 2; i < num; i++) {
                    result *= i;
                }
            }
            if (callback != null) {
                callback.handler(result);
            }
        }
    }

    2.可以使用java5的新特性,实现Callable这个接口

    package de.bvb;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class Test2 {
        public static void main(String[] args) throws Exception {
            ExecutorService pool = Executors.newFixedThreadPool(1);
            Future<Long> f1 = pool.submit(new MyCallable(5));
            System.out.println(f1.get().toString());
            pool.shutdown();
        }
    }
    
    class MyCallable implements Callable<Long> {
        private long num;
    
        public MyCallable(long num) {
            super();
            this.num = num;
        }
    
        @Override
        public Long call() throws Exception {
            long result = -1l;
            if (num > 0) {
                result = 1l;
                for (int i = 2; i < num; i++) {
                    result *= i;
                }
            }
            return result;
        }
    
    }
  • 相关阅读:
    select poll使用
    linux下tomcat shutdown后 java进程依然存在
    poj 1222 EXTENDED LIGHTS OUT(高斯消元)
    poj 2377 Bad Cowtractors
    C#:总结页面传值几种方法
    从 Racket 入门函数式编程
    程序猿接私活经验总结,来自csdn论坛语录
    什么是SEO?SEO干嘛的?怎么做SEO?
    Java设计模式-观察者模式
    非常特别的一个动态规划新手教程
  • 原文地址:https://www.cnblogs.com/Westfalen/p/6232843.html
Copyright © 2011-2022 走看看