1. 提交任务的两种方式
executor
submit
2. executor
executor
位于Executor
接口中
java
public interface Executor {
void executor(Runnable command);
}
executor
提交的是无返回值的任务
下面是一个具体的例子
java
package LearnThreadPool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 使用executor
* * @author cat
* @version 2025/2/25 11:13
* @since JDK17
*/
public class UseExecutor {
public static void m() {
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(UseExecutor::m);
executorService.shutdown();
}
}
输出 :
pool-1-thread-1
3. submit
submit
位于ExecutorService
接口中
java
public interface ExecutorService {
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
}

Future
也是一个接口,该接口定义了与任务执行结果相关的功能。
java
public interface Future<V> {
boolean cancel(boolean mayInterruptIfRunning);
boolean isCancelled();
boolean isDone();
V get() throws InterruptedException, ExecutionException;
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
5个方法的相关功能
下面是一个使用submit
的具体例子
java
package LearnThreadPool;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* 使用submit
* * @author cat
* @version 2025/2/25 11:27
* @since JDK17
*/
public class UseSubmit {
private static ExecutorService executorService = Executors.newSingleThreadExecutor();
// 该方法可以实现Runnable接口
public static void m1() {
System.out.println("曲·启明");
}
public static void test01() {
Future<?> future = executorService.submit(UseSubmit::m1);
try {
Object object = future.get();
System.out.println(object); // null
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
}
public static void test02() {
Future<String> submit = executorService.submit(UseSubmit::m1, "任务完成");
try {
String string = submit.get();
System.out.println(string);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
}
// 该方法可以实现Callable<String>接口
public static String m2() {
return "曲·启明" + " 露西亚·誓焰";
}
public static void test03() {
Future<String> submit = executorService.submit(UseSubmit::m2);
try {
String string = submit.get();
System.out.println(string);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
test01();
System.out.println("---------------------------");
test02();
System.out.println("---------------------------");
test03();
executorService.shutdown();
}
}
4. Executor
和Submit
的区别
