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

  • 相关阅读:
    Bruce Eckel:编程生涯(转载)
    NSScanner用法详解
    如何为github上的项目添加gif效果图
    iOS-网址集
    支持后台播放音频
    iOS:UITableView 方法 属性
    Quartz2D简介及基本线条绘制
    遍历输出所有子视图(View)
    UIView常用属性与方法/UIKit继承结构
    netty02(接受消息以后进行返回)
  • 原文地址:https://www.cnblogs.com/xdcat/p/12981183.html
Copyright © 2011-2022 走看看