打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java之Callable和Runnable

1 接口定义 

1) Callable接口

public interface Callable<V> {
    V call() throws Exception;
}

2) Runnable接口

public interface Runnable {
    public abstract void run();
}

 

 

2 不同点和相同点

1)相同点

都是接口,都可编写多线程程序,都是调用Thread.start()启动线程

2)不同点

Callable可以返回执行结果,是个泛型,与Future、FutureTask配合可以通过FutureTask.get()获取异步执行的结果,但是Runnable不可以。

Callable里面有取消这个任务,而且异常可以外抛,但是Runnable异常只能内部run消化。

FutureTask.get()得到异步执行的结果,此方法会阻塞主进程的继续往下执行。

3 Callable测试用例

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

public class TestCallableAndFuture {
    public static void main(String[] args) {
        
        //构建Callable
        Callable<String> callable = new Callable<String>() {
            @Override
            public String call() throws Exception {
                Thread.sleep(2000);
                return "chenyu callable finish";
            }
        };
        
        //构建FutureTask
        FutureTask<String> futureTask = new FutureTask<>(callable);
        
        //运行线程
        new Thread(futureTask).start();
        
        try {
            System.out.println("chenyu begin");
            System.out.println(futureTask.isDone());
            //futureTask.cancel(true);
            if (!futureTask.isCancelled()) {
                System.out.println(futureTask.get());
                System.out.println(futureTask.isDone());
                System.out.println("chenyu end");
            } else {
                System.out.println("the thread is cancel");
            }
                
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

 

 

4 运行结果

如果注释掉// futureTask.cancel(true)运行结果如下

chenyu begin
false
chenyu callable finish
true
chenyu end

如果不注释掉futureTask.cancel(true)运行结果如下

chenyu begin
false
the thread is cancel
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
两个例子解释Callable 和 Future接口
【第77题】JAVA高级技术-多线程11(创建线程的5种方式)
Future和FutureTask
线程-1、创建线程的方式及实现
Java并发编程之线程的创建
Java异步编程接口:Callable和Future | Aoho''s Blog
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服