欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA中实现线程第三种方式

程序员文章站 2022-07-10 18:12:35
...

JAVA中实现线程第三种方式

  • 实现线程的第三种方式:FutureTask方式,实现Callable接口。(JDK8新特性)

  • 这种方式实现的线程可以获取线程的返回值
    之前的两种方式(实现Runnable接口 和 继承Tread类并实现run方法)是无法
    获取线程的返回值的

  • 当系统委派一个线程去执行一个任务,该线程执行完任务之后,可能会有一个执行结果:使用Callable方式实现线程,来获取返回值

  • 实现callable接口
    这种方法的优点:可以获取线程的执行结果
    这种方法的缺点:效率比较低,在获取支线程的执行结果时,当前线程受阻塞。

public class Callable01 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建一个“未来任务”类
        //Callable方法相当于run方法,只不过多了个返回值
        FutureTask<Integer> futureTask = new FutureTask<>(new Callable<>() {
            @Override
            public Integer call() throws Exception {
                System.out.println("Callable begin");
                Thread.sleep(1000 * 10);
                System.out.println("Callable over");
                int a = 100;
                int b = 200;
                return a + b;  //自动装箱(300变成Integer)
            }
        });
        //创建线程对象
        Thread t = new Thread(futureTask);
        //线程启动
        t.start();

        //在主线程中获取支线程的返回值
        //get方法会导致当前线程阻塞
        int u = futureTask.get();  //自动拆箱(Integer 转为 int//)
        System.out.println("支线程执行结果:" + u);

        //main方法这里会发生阻塞,必须要等待支线程返回结果才能继续运行
        //而get方法可能要等很久
        System.out.println("hello world");
    }
}

相关标签: 零基础 java