Runnable和Callable创建线程的区别

版权声明:版权所有,翻版我也没办法!!! https://blog.csdn.net/tebtebtebteb/article/details/82934400

我们知道实现Runnable和实现Callable均可创建线程,那么他们有什么区别呢?

Runnable和Callable的区别

Runnable接口

public interface Runnable {
    void run();
}

Callable接口

public interface Callable<V> {
    V call() throws Exception;
}

总结:

  1. Runnable执行方法是run(),Callable是call()
  2. 实现Runnable接口的任务线程无返回值;实现Callable接口的任务线程能返回执行结果
  3. call方法可以抛出异常,run方法若有异常只能在内部消化

Callable示例

public class CallableDemo {
    public static void main(String[] args) {
        //创建一个定长的核心线程和最大线程数都是1的FixedThreadPool线程池
        ExecutorService executorService = Executors.newFixedThreadPool(2);

        Callable<String> callable = new Callable<String>() {
            @Override
            public String call() throws Exception {
                Thread.sleep(3000);
                System.out.println("Thread_current="+Thread.currentThread());
                return "Hello world";
            }
        };
        System.out.println("start");
        // 执行任务并获取Future对象  
        Future<String> future = executorService.submit(callable);

        try{
            //future.get()线程结果,会阻塞当前线程直到线程结束
            System.out.println("future.get()="+future.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

        System.out.println("end");

        // 关闭线程池  
        executorService.shutdown();
    }
}

猜你喜欢

转载自blog.csdn.net/tebtebtebteb/article/details/82934400
今日推荐