zoukankan      html  css  js  c++  java
  • Callable,Runnable比较及用法

    编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。

    一般有三种方法,Thread,Runnable,Callable.

    Runnable和Callable的区别是,

    (1)Callable规定的方法是call(),Runnable规定的方法是run().

    (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得

    (3)call方法可以抛出异常,run方法不可以

    (4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。

    它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。

    通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

    另外:

    Callable接口实际上是属于Executor框架中的功能类,Callable接口与Runnable接口的功能类似,但提供了比Runnable更加强大的功能。

    • Callable可以在任务结束的时候提供一个返回值,Runnable无法提供这个功能
    • Callable的call方法分可以抛出异常,而Runnable的run方法不能抛出异常

    实例:package test;

    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    /***/
    public class CallableAndFuture {
        static class MyThread implements Callable<String> {
            @Override
            public String call() throws Exception {
                return "Hello world";
            }
        }
    
        static class MyThread2 implements Runnable {
            @Override
            public void run() {
    
            }
        }
    
        public static void main(String[] args) {
            ExecutorService threadPool = Executors.newSingleThreadExecutor();//创建单一线程
            Future<String> future = threadPool.submit(new MyThread());
    
            try {
    System.out.println(future.get());
    //获取异步执行的结果,如果没有结果可用,此方法会阻塞直到异步计算完成。
    //Hello world
            } catch (Exception e) { 
    }
    finally {
    threadPool.shutdown();
    }
    }
    }
  • 相关阅读:
    Django学习日记04_模板_overview
    Python并发实践_01_线程与进程初探
    web自动化测试笔记(二)
    web自动化测试笔记(一)
    app版本升级的测试点
    移动测(APP)试与web端测试的区别
    Dubbo服务器与普通服务器的区别
    java的错误分类
    安卓手机与iOS手机的区别
    在webstorm里使用git
  • 原文地址:https://www.cnblogs.com/xingzc/p/8932661.html
Copyright © 2011-2022 走看看