一、是什么
是获得多线程的方式之一
还有实现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
本文介绍了Java中实现多线程的两种方式:Runnable和Callable。通过实例展示了Callable的使用,包括创建FutureTask并启动线程,以及获取带有返回值的任务结果。与Runnable相比,Callable可以抛出异常且有返回值。
533

被折叠的 条评论
为什么被折叠?



