ThreadPoolExecutor submit()和execute的区别
时间: 2023-10-21 15:24:10 浏览: 51
ThreadPoolExecutor类是Java中提供的一个线程池实现类。它提供了两种提交任务的方法: submit()和execute()。
1. submit():
submit()方法用于提交一个任务,并返回一个表示该任务结果的Future对象。这个方法可以用来执行实现了Callable接口的任务,并且可以获取任务的执行结果。示例代码如下:
```java
ThreadPoolExecutor executor = new ThreadPoolExecutor(...);
Future<T> future = executor.submit(new Callable<T>() {
public T call() throws Exception {
// 任务逻辑
return result;
}
});
```
2. execute():
execute()方法用于提交一个Runnable任务,它没有返回值,因此无法获取任务的执行结果。示例代码如下:
```java
ThreadPoolExecutor executor = new ThreadPoolExecutor(...);
executor.execute(new Runnable() {
public void run() {
// 任务逻辑
}
});
```
所以,主要区别在于submit()方法可以用来执行Callable任务,并且可以获取任务的执行结果,而execute()方法只能执行Runnable任务,无法获取执行结果。
另外,submit()方法还可以接受Runnable任务作为参数,但是由于它返回一个Future对象,所以无法通过这个方法获取Runnable任务的执行结果。如果需要获取Runnable任务的执行结果,可以使用submit()方法返回的Future对象进行阻塞或轮询等操作。