栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现多线程的方式(通过Callable和FutureTask实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现多线程的方式(通过Callable和FutureTask实现)

        用Java实现多线程的方式有两种:①、继承Thread类;②、实现Runnable接口。并且这两种实现方式都是重写run方法。我们知道run方法是没有返回值的。如果你想让一个多线程有一个返回值,那么你可以实现Callable接口。

        在实现Callable的时候,你需要去给他一个类型。我们可以看一下Callable的源码:

@FunctionalInterface
public interface Callable {
    
    V call() throws Exception;
}

        传入的类型是为了指定call方法的返回类型。那么接下来,我们让一个类去实现这个接口。代码如下:

import java.util.concurrent.Callable;

public class MyCallable implements Callable {
    @Override
    public String call() throws Exception {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+" "+i);
        }
        return "程序运行结束";
    }
}

        我们在这个方法里,打印10个数,打印完后,输出 “程序运行结束”。

        接下来,我们需要注意,以前使用的是Runnable接口去实现一个多线程,在开启线程时,我们是需要,将他作为一个参数传递给Thread方法。而Callable与此不同的是,他需要将自己的实现类作为参数传递给FutureTask类,并且传递一个类型进去,通常类型于Callable传递进去的类型相同。然后再将FutureTask的对象传递给Thread类。代码如下图所示:

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

public class DemoTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable mc = new MyCallable();
        FutureTask ft = new FutureTask<>(mc);
        Thread tr = new Thread(ft);
        tr.start();
    }
}

         运行结果:

       

        在结果中,我们虽然输出了结果,但是却没有获取到放回值,获取返回值的方法存在于FutureTask类中,我们可以调用方法get()去获取方法的返回值。

        MyCallable mc = new MyCallable();
        FutureTask ft = new FutureTask<>(mc);
        Thread tr = new Thread(ft);
        tr.start();
        // 获取call方法的返回值
        String s = ft.get();
        System.out.println(s);

        这样子,我们就实现了多线程!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/841379.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号