java多线程:Callable接口实现多线程
程序员文章站
2022-05-05 16:41:38
...
在线帮助文档:https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/Callable.html
传统实现多线程一般依靠Runnable,但是Runnable接口有一个缺点:当线程执行完以后无法获取一个返回值。所以从JDK 1.5之后提出了一个新的线程实现接口:java.util.consurrent.Callable接口
接口定义:
@FunctionalInterface
public interface Callable<V>{
public V call() throws Exception;
}
Callable和Thread类没有直接的关系,Callable的对象必须先封装到FutureTask中,然后在通过FutureTask传给Thread类,这样才能启动多线程
范例:使用Callable实现多线程处理
package threads;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
class MyThread implements Callable<String>{ // 线程的主体类
@Override
public String call() throws Exception { // 多线程要执行的功能应该在run()方法中进行定义
for(int i = 0; i < 10; i++) {
System.out.println("卖票,ticket = " + i);
}
return "线程执行完毕";
}
}
public class Main {
public static void main(String[] args) throws Exception {
FutureTask<String> task = new FutureTask<>(new MyThread());
new Thread(task).start();
System.out.println("[线程返回数据]: " + task.get());
}
}
请解释Runnable与Callable的区别?
- Runnable是JDK 1.0的时候提出的多线程实现接口,而Callable是在JDK 1.5之后提出的。
- java.lang.Runnable接口中只提供有一个run()方法,并且没有返回值。
- java.util.concurrent.Callable接口提供有call()方法,可以有返回值。