Callable
Callable
- 
  
- 
1、可以有返回值 
 2、可以抛出异常
 3、方法不同,run() / call()
- 
代码测试   
 
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、结果可能需要等待,会阻塞!
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号