zoukankan      html  css  js  c++  java
  • 5、JUC--实现 Callable 接口

    Callable接口

     Java 5.0 在 java.util.concurrent 提供了一个新的创建执行
      线程的方式:Callable 接口


     Callable 接口类似于 Runnable,两者都是为那些其实例可
      能被另一个线程执行的类设计的。但是 Runnable 不会返
      回结果,并且无法抛出经过检查的异常。


     Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁

    创建执行线程的方法有四种:

    1、继承Thread类或者创建线程类

    2、通过实现Runable接口创建线程类

    3、通过Callable接口

    4、通过线程池创建线程

    相对于Runable接口的不同:

    可以使用泛型,方法可以有返回值没并且可以抛出异常

    实例:

    public class TestCallabel {
        
    public static void main(String[] args) {
        ThreadDemoCallable tc = new ThreadDemoCallable();
        
        //此时的使用方式有些不同
        //1、需要FutureTask实现类的支持,用于接收运算结果 
        FutureTask<Integer> result = new FutureTask<>(tc);
        
        new Thread(result).start();
        //2、接收运算的结果
        //注意:只有上述的线程之后下方的代码才会执行----闭锁
        try {
            Integer sum = result.get();
            System.out.println(sum);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
    
    }
    
    //可以使用泛型
    class ThreadDemoCallable implements Callable<Integer>{
        @Override
        public Integer call() throws Exception {
            //计算整合
            int sum = 0;
            for(int i = 0;i <10;i++){
                sum +=i;
            }
            return sum;
        }
    }

    效率高

    可以实现和闭锁一样的实现功能

  • 相关阅读:
    uva 1637 Double Patience
    Emacs ^ Vim
    uva 11181 Probability|Given
    uva 10491 Cows and Cars
    uva 1636 Headshot
    hdu 4336 Card Collector
    zoj 3640 Help Me Escape
    Codeforces 148 D Bag of mice
    hdu 4405 Aeroplane chess
    hdu 3853 LOOPS
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/10793688.html
Copyright © 2011-2022 走看看