java callable 教程
时间: 2023-09-05 20:11:07 浏览: 169
Java多线程之Callable接口的实现
Callable是Java并发编程中的一个接口,它允许你在一个任务中返回一个结果,并且可以抛出一个异常。相比Runnable接口,Callable接口在使用时更为灵活。
以下是使用Callable的基本步骤:
1. 创建一个实现Callable接口的类,并重写call()方法。call()方法返回一个泛型类型的结果,并且可以抛出异常。
2. 创建一个FutureTask对象,将Callable对象封装进去。
3. 创建一个线程对象,并将FutureTask对象作为参数传入。
4. 启动线程并等待线程执行完毕。
5. 调用FutureTask对象的get()方法获取线程的执行结果。
下面是一个简单的示例代码:
```java
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableDemo {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 创建一个实现Callable接口的类
MyCallable myCallable = new MyCallable();
// 创建一个FutureTask对象,将Callable对象封装进去
FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
// 创建一个线程对象,并将FutureTask对象作为参数传入
Thread thread = new Thread(futureTask);
// 启动线程
thread.start();
// 调用FutureTask对象的get()方法获取线程的执行结果
int result = futureTask.get();
System.out.println("线程执行结果为:" + result);
}
}
// 创建一个实现Callable接口的类
class MyCallable implements Callable<Integer> {
// 重写call()方法
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
}
```
在上面的代码中,我们创建了一个实现了Callable接口的MyCallable类,并重写了call()方法。在main()方法中,我们创建了一个FutureTask对象,将MyCallable对象封装进去。然后创建了一个线程对象,并将FutureTask对象作为参数传入。最后,我们启动了线程,并调用FutureTask对象的get()方法获取线程的执行结果。
需要注意的是,当调用get()方法时,如果线程还未执行完毕,get()方法会阻塞当前线程直到线程执行完毕。因此,在使用get()方法时,需要注意线程的执行时间,避免出现死锁等问题。
总之,Callable接口是Java并发编程中比较重要的一个接口,掌握它的使用方法可以帮助我们更好地编写多线程程序。
阅读全文