JUC-Callable

本文介绍了Java中实现多线程的两种方式:Runnable和Callable。通过实例展示了Callable的使用,包括创建FutureTask并启动线程,以及获取带有返回值的任务结果。与Runnable相比,Callable可以抛出异常且有返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、是什么

是获得多线程的方式之一

还有实现Runnabe、继承Thread类

二、怎么用

package com.cb.demo.example;

import org.omg.PortableServer.THREAD_POLICY_ID;

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

class MyThread implements Runnable{

    @Override
    public void run() {

    }
}

class MyThread2 implements Callable<Integer>{

    @Override
    public Integer call() throws Exception {
        System.out.println("........come in Callable");
        try{TimeUnit.SECONDS.sleep(4);}catch(InterruptedException e){e.printStackTrace();}
        return 1024;
    }
}

/**
 * 多线程中,第三种获得多线程的方式
 *
 * get()方法放最后
 */
public class CallableDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//            MyThread2 myThread2=new MyThread2();
//            Thread t1=new Thread(myThread2);
//            t1.start();

        /**
         * 多态
         * 传的是一个A接口
         * 当C类实现了A接口,就可以相当于A传入参数
         * C实现了B接口
         * B接口继承A接口
         *
         * 源码:
         * public class FutureTask<V> implements RunnableFuture<V>
         *
         * public interface RunnableFuture<V> extends Runnable, Future<V>
         *
         */
        FutureTask futureTask=new FutureTask(new MyThread2());
        new Thread(futureTask,"A").start();
        new Thread(futureTask,"").start();
        System.out.println(Thread.currentThread().getName()+"----计算完成");
        System.out.println(futureTask.get());
    }
}

三、与实现Runnable对比

        (1)是否有返回值

       (2)是否抛异常

       (3)落地方法不一样,一个是run,一个是call

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐路上的小人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值