通过实现callable接口的方式,可以创建一个线程,需要重写其中的call方法。启动线程时,需要新建一个Callable的实例,再用FutureTask实例包装它,最终,再包装成Thread实例,调用start方法启动,并且,可以通过FutureTask的get方法来获取返回值。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
public class TestCallable implements Callable<Integer>{
//通过实现callable接口的方式,可以创建一个线程任务。需要重写call()方法
@Override
public Integer call() throws Exception {
for (int i = 0; i <= 2000; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
return 1;
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
//可以配合线程池来使用
ExecutorService es = Executors.newFixedThreadPool(3);
Callable<Integer> task=new TestCallable();
Future<Integer> future=es.submit(task);//传入临界资源 实现callable接口的对象
System.out.println(future.get());//获得定义的返回值
//也可以单独创建一个线程
// Callable<Integer> tc=new TestCallable();
// FutureTask<Integer> task=new FutureTask<Integer>(tc);//FutureTask 方法传入临界资源
// new Thread(task).start();//线程传入参数 之前准备的任务
// System.out.println(task.get());
}
}