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

  • 相关阅读:
    ZOJ3209 Treasure Map —— Danc Links 精确覆盖
    HUST1017 Exact cover —— Dancing Links 精确覆盖 模板题
    FZU1686 神龙的难题 —— Dancing Links 可重复覆盖
    POJ3074 Sudoku —— Dancing Links 精确覆盖
    HDU3085 Nightmare Ⅱ —— 双向BFS + 曼哈顿距离
    HDU3533 Escape —— BFS / A*算法 + 预处理
    HDU3567 Eight II —— IDA*算法
    HDU1560 DNA sequence —— IDA*算法
    FZU2150 Fire Game —— BFS
    POJ3087 Shuffle'm Up —— 打表找规律 / map判重
  • 原文地址:https://www.cnblogs.com/xdcat/p/12981183.html
Copyright © 2011-2022 走看看