[06005] JUC Javaのマルチスレッドの4つの方法のうち3つを達成するために:呼び出し可能インターフェースを実装

呼び出し可能インターフェースを実装

キー:コーラブル、FutureTask、Runnableを、アダプタモード

package com.magic.juc0117;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @Description
 * 与Runnable接口有3点不同
 * 实现方法
 * 异常
 * 返回值 void Integer
 * @Author Chelsea
 * @Date 2020/1/18 12:25
 */

class MyThread1 implements Runnable
{

    @Override
    public void run() {

    }
}
class MyThread implements Callable<Integer>
{
//@FunctionalInterface
//public interface Callable<V>
//查看源码可见Callable是函数式接口,只需要实现一个call()方法

    @Override
    public Integer call() throws Exception {
        System.out.println("come in call");
        return 1024;
    }
}
public class CallableDemo {

    public static void main(String[] args) throws Exception {
       
         /**
         * 其实源码用到了 适配器模式
         * 查看API(以下皆来源于API)可以了解到对于Callable没有适合的构造方法,
         * 其中Thread的构造方法之一Thread(Runnable target, String name),
         * java工作人员采用了适配器模式:
         * Runnable的实现类之一FutureTask,而FutureTask两中构造方法
         * 1.FutureTask(Callable<V> callable)
         * 创建一个 FutureTask ,它将在运行时执行给定的 Callable ;
         * 2.FutureTask(Runnable runnable, V result)
         * 创建一个 FutureTask ,将在运行时执行给定的 Runnable ,并安排 get将在成功完成后返回给定的结果;
         * 由上面可知我们用第一种即可。
         */
        //Runnable 用 new Thread(futureTask,"A") Callable也可以哦
        FutureTask<Integer> futureTask = new FutureTask(new MyThread());
        new Thread(futureTask,"A").start();
        Integer result = futureTask.get();
        System.out.println(result);
    }
}

PS。3つの他の実装は、随時いっぱい従います。

仕上げ学びJUC

公開された53元の記事 ウォンの賞賛0 ビュー371

おすすめ

転載: blog.csdn.net/weixin_40778497/article/details/104039952