线程池submit和execute具体使用详解
时间: 2023-07-05 18:34:26 浏览: 64
ThreadPoolExecutor线程池原理及其execute方法(详解)
5星 · 资源好评率100%
线程池是一种常见的多线程编程模型,在 Java 中可以通过 `java.util.concurrent.ThreadPoolExecutor` 类来实现。线程池中的任务可以通过两种方式提交到线程池中执行:`submit()` 和 `execute()`。
`execute()` 方法是线程池中最常用的方法,用于将一个 `Runnable` 对象提交到线程池中执行。例如:
```
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.execute(new Runnable() {
@Override
public void run() {
System.out.println("Hello, world!");
}
});
```
`submit()` 方法类似于 `execute()` 方法,但是它可以返回一个 `Future` 对象,通过这个对象可以获取任务执行的结果。例如:
```
ExecutorService executor = Executors.newFixedThreadPool(10);
Future<Integer> future = executor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return 42;
}
});
try {
Integer result = future.get();
System.out.println(result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
```
注意,`submit()` 方法可以接受两种类型的参数:`Runnable` 和 `Callable`。`Runnable` 表示一个没有返回值的任务,而 `Callable` 则表示一个可以返回结果的任务。
总之,`execute()` 方法适用于不需要获取任务执行结果的场景,而 `submit()` 方法适用于需要获取任务执行结果的场景。
阅读全文