Callable

Callable

  • 在这里插入图片描述
  • 1、可以有返回值
    2、可以抛出异常
    3、方法不同,run() / call()

  • 代码测试

    在这里插入图片描述

img

public class CallableTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // new Thread(new Runnable()).start();
        // new Thread(new FutureTask<V>()).start();
        // new Runnable() 等价于 new FutureTask<V>()
        // new Thread(new FutureTask<V>( Callable )).start();
        MyThread myThread = new MyThread();     //如何启动 Callable
        FutureTask futureTask = new FutureTask(myThread);   //适配类
        new Thread(futureTask, "A").start();
        String msg = (String) futureTask.get();  //获取Callable的返回结果 可能会产生阻塞
        System.out.println(msg);
    }
}

class MyThread implements Callable<String> {
    @Override
    public String call() throws Exception {
        return "返回Callable";
    }
}
//返回Callable
  • 两个线程触发
public class CallableTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // new Thread(new Runnable()).start();
        // new Thread(new FutureTask<V>()).start();
        // new Runnable() 等价于 new FutureTask<V>()
        // new Thread(new FutureTask<V>( Callable )).start();
        MyThread myThread = new MyThread();     //如何启动 Callable
        FutureTask futureTask = new FutureTask(myThread);   //适配类
        new Thread(futureTask, "A").start();
        new Thread(futureTask, "B").start();
        String msg = (String) futureTask.get();  //获取Callable的返回结果 可能会产生阻塞 :可以使用异步通信
        System.out.println(msg);
    }
}

class MyThread implements Callable<String> {
    @Override
    public String call() throws Exception {
        return "返回Callable";
    }
}

//返回Callable
1、有缓存
2、结果可能需要等待,会阻塞!
posted @ 2021-05-03 21:29  saxon宋  阅读(287)  评论(0)    收藏  举报