execute
execute只适合提交无返回值的任务
submit
submit方法既支持Runnable任务也支持Callable任务
方法名 返回值类型 描述
submit(Runnable) Future<?> 提交Runnable任务
submit(Runnable, T) Future<?> 提交Runnable任务并指定执行结果
submit(Runnable<T>) Future<?> 提交Callable任务
submit(Runnable) 方法
public static void main(String[] args) {
//创建任务
Task task1 = new Task();
//创建线程池
ExecutorService threadPool = Executors.newSingleThreadExecutor();
//提交任务
Future<?> future = threadPool.submit(task1);
try {
//获取任务执行结果
Object result = future.get();
//输出任务执行结果
System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e);
} finally {
//关闭线程池
threadPool.shutdown();
}
}
class Task implements Runnable {
@Override
public void run() {
//获取当前线程
Thread thread = Thread.currentThread();
System.out.println(thread.getName());
}
}
运行结果为:
pool-1-thread-1
null //返回为空
submit(Runnable, T) 方法
提交一个Runnable任务给线程池,并附带一个执行结果
该方法只适用于执行任务的同时还附带一个参数
Future<String> future = threadPool.submit(task1,"任务完成");
运行结果为:
pool-1-thread-1
任务完成
submit(Runnable<T>) 方法
接收返回信息为Future对象
package org.example;
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
//创建任务
ResultTask task1 = new ResultTask();
//创建线程池
ExecutorService threadPool = Executors.newSingleThreadExecutor();
//提交任务
Future<String> future = threadPool.submit(task1);
try {
//获取任务执行结果
String result = future.get();
//输出任务执行结果
System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e);
} finally {
//关闭线程池
threadPool.shutdown();
}
}
}
class ResultTask implements Callable<String> {
@Override
public String call() {
Thread thread = Thread.currentThread();
System.out.println(thread.getName());
return "任务完成";
}
}
运行结果为:
pool-1-thread-1
任务完成
Future
方法名 描述
cancel(boolean) 取消任务,ture表示尝试中断正在执行任务的进程,false则相反
get() 阻塞式获取任务执行结果
get(long,TimeUnit) 在指定时间内阻塞式获取任务执行结果,若超时则抛出异常
isCancelled() 任务是否取消
isDone() 任务是否完成