Runnale是执行工作的独立任务,但是它不会返回任何值。 如果你希望任务在执行完成后能够返回一个值,那么可以实现Callable接口。
package threadpool;
import java.util.concurrent.Callable;
/**
*
* @author hewei
*
* Runnable是执行工作的独立任务,但是它不返回任何值 实现Callable接口可以实现返回值
*/
public class TaskWithResult implements Callable<String> {
private int id;
public TaskWithResult(int id) {
this.id = id;
}
@Override
public String call() throws Exception {
Thread.sleep(1000);
return "报告老大 ...线程" + id+" 执行完毕";
}
}
编写测试类:
package threadpool;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class CallableDemo {
public static void main(String[] args) {
ExecutorService exec = Executors.newSingleThreadExecutor();
ArrayList<Future<String>> results = new ArrayList<Future<String>>();
for(int i=0;i<10;i++){
results.add(exec.submit(new TaskWithResult(i)));
}
for(Future<String> fs : results){
try {
System.out.println(fs.get()); //fs.get() 为阻塞方法
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
exec.shutdown();
exec.shutdownNow();
}
}
分享到:
相关推荐
然而,在一些情况下,我们需要在多线程中返回结果或者抛出异常,这时就需要使用Callable接口。 Callable接口是Java 1.5中引入的新的接口,it提供了一个call()方法,该方法可以返回结果并抛出异常。Callable接口的...
此外,Java 5引入了Callable接口,它提供了一种更灵活的方式来创建线程,特别是当需要从线程中返回结果时。 Callable接口类似于Runnable,但比Runnable更强大。Runnable接口的run()方法不能有返回值,而Callable的...
而Callable接口与Runnable类似,但它的call()方法可以返回一个结果,并能抛出异常,适合于需要返回值的异步计算。 当我们需要创建一个临时的任务或者对象仅在本地使用,而无需定义一个完整的类时,可以使用匿名内部...
在Java中,`java.util.concurrent`包提供了`Future`和`Callable`接口来表示具有返回值的任务,而`Runnable`则用于无返回值的任务。 任务调度在多线程环境中至关重要,Java提供了多种任务调度工具。其中,`...
* Callable 的任务执行后可返回值,而 Runnable 的任务是不能返回值的。 * Call 方法可以抛出异常,run 方法不可以。 * 运行 Callable 任务可以拿到一个 Future 对象,表示异步计算的结果。 线程的状态流转图: ...
1. **Callable接口**:讲解Callable接口的基本概念,如何创建Callable对象,以及call()方法的使用。 2. **Future接口**:介绍Future接口的主要方法,如isDone()检查任务是否完成,cancel()尝试取消任务,get()获取...
Callable接口类似Runnable,但它可以返回一个结果并抛出异常。Future表示Callable任务的结果,可以用来检查任务是否完成、获取结果或取消任务。示例: ```java Future<Integer> future = executor.submit(new ...
#### 四、Callable接口与有返回值的任务 除了实现`Runnable`接口和继承`Thread`类之外,还可以使用`Callable`接口来创建有返回值的任务。`Callable`接口类似于`Runnable`,但允许任务返回结果,并且可以抛出异常。 ...
而Callable接口类似于Runnable,但它可以有返回值,并能够抛出异常。 Future是一个接口,代表异步计算的结果。它提供了get方法,用于获取计算结果,以及cancel方法来取消任务,还有isDone和isCancelled等方法用于...
3. **实现Callable接口**:创建Callable实例,通过FutureTask包装后传递给Thread构造器,Callable任务可以有返回值并可以抛出异常。 4. **使用线程池**:通过ExecutorService和ThreadPoolExecutor创建线程池,线程池...
Thread类适合简单的线程需求,Runnable接口更灵活,Callable接口支持返回值,ExecutorService则提供了更高效的线程管理和资源调度。在实际开发中,应根据项目需求选择合适的方式创建线程。在提供的压缩包文件"Thread...
将此Callable接口实现类的对象作为参数传递到FutureTask构造器中,创建FutureTask的对象 FutureTask<Integer> futureTask = new FutureTask(numThread); // 3. 将FutureTask的对象作为参数传递到Thread类的构造...
Callable接口定义了一个`call()`方法,类似于Runnable的`run()`方法,但是`call()`可以有返回值。在多线程环境中,我们可以通过`FutureTask`将Callable转换为Runnable,这样就可以在ExecutorService中执行。`...
在 Java 中,实现多线程有多种方式,本文将详细介绍 Java 中的三种主要实现方式:继承Thread类、实现Runnable接口和实现Callable接口。 继承Thread类 继承Thread类是Java中最基本的多线程实现方式。通过继承Thread...
在Java编程语言中,创建线程主要有三种方法:通过实现`Runnable`接口、通过实现`Callable`接口以及直接继承`Thread`类。这三种方法各有特点,适用于不同的场景。 1. **实现`Runnable`接口创建线程:** 这是最常见...