实现多线程的另一种方式-Callable

时间:2023-03-09 18:55:25
实现多线程的另一种方式-Callable
package com.mldn.thread;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; public class TestMyCallable {
public static void main(String[] args) throws InterruptedException, ExecutionException {
/*构造方法摘要
FutureTask(Callable<V> callable):
创建一个 FutureTask,一旦运行就执行给定的 Callable。
*/ FutureTask task = new FutureTask(new MyCallable());
/*
* class FutureTask implements RunnableFuture
* interface RunnableFuture extends Runnable,Future
* 说明:FutureTask也是Runnable的子类
*/
//这里的task可以当作Runnable对象 new Thread(task).start();//启动线程
System.out.println(task.get());//返回结果
}
} /*------------------------自定义类MyCallable---------------------------*/ package com.thread; import java.util.concurrent.Callable; /*
* 自定义类实现Callable接口
* Runnable和Callable的区别:
* Runnable执行完线程程序后没有返回结果(重写run方法)
* Callable执行完线程程序后有返回结果 (重写call方法)
*/
public class MyCallable implements Callable<String> { @Override
public String call() throws Exception {
for(int i=10;i>0;i--){
System.out.println(i);
}
return "票卖完了,下次吧。。。";//有返回结果
}
}