zoukankan      html  css  js  c++  java
  • 【JUC】实现多线程的第三种方式Callable

    实现线程的三种方式比较

    1. 继承Thread类

     1 class ExtendsThread extends Thread{
     2     public void run(){
     3         System.out.println("Thread");
     4     }
     5 }
     6 public class RunnableDemo {
     7     public static void main(String[] args) {
     8         Thread thread = new Thread(new ExtendsThread());
     9         thread.start();
    10     }
    11 }

    2. 实现Runnable接口

     1 class RunnableThread implements Runnable{
     2     @Override
     3     public void run() {
     4         System.out.println("Runnable");
     5     }
     6 }
     7 public class RunnableDemo {
     8     public static void main(String[] args) {
     9         Thread thread = new Thread(new RunnableThread());
    10         thread.start();
    11     }
    12 }

    3. 实现Callable接口(学习线程池的必要前提)

     1 class CallableThread implements java.util.concurrent.Callable<Integer>{
     2     //带返回值 抛异常
     3     @Override
     4     public Integer call() throws Exception {
     5         System.out.println("callable");
     6         return 2048;
     7     }
     8 }
     9 public class CollableDemo {
    10     public static void main(String[] args) throws ExecutionException, InterruptedException {
    11         FutureTask<Integer> futureTask = new FutureTask<>(new CallableThread());
    12         Thread t1 = new Thread(futureTask,"CallableThread");
    13         t1.start();
    14         System.out.println(futureTask.get());//2048
    15     }
    16 }

    Runnable接口和Callable接口的实现类,都可以被ThreadPoolExecutor或Scheduled-ThreadPoolExecutor执行。它们之间的区别是Runnable不会返回结果,而Callable可以返回结果。除了可以自己创建实现Callable接口的对象外,还可以使用工厂类Executors来把一个Runnable包装成一个Callable。

    下面是Executors提供的,把一个Runnable包装成一个Callable的API。

    public static Callable<Object> callable(Runnable task) // 假设返回对象Callable1

    下面是Executors提供的,把一个Runnable和一个待返回的结果包装成一个Callable的API。

    public static <T> Callable<T> callable(Runnable task, T result) // 假设返回对象Callable

  • 相关阅读:
    scss rem 转换函数
    URL Scheme —— 唤端媒介
    extend 对象继承
    [转载]jdk1.8垃圾回收器
    [转载]java高分局之jstat命令使用
    一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬
    context-param 监听器 过滤器 servlet 拦截器的区别
    springSecurity源码分析——DelegatingFilterProxy类的作用
    Spring Security的核心拦截器
    CAS之TICKET
  • 原文地址:https://www.cnblogs.com/xdcat/p/12981183.html
Copyright © 2011-2022 走看看