1. 提交任务的两种方式
executor
submit
2. executor
executor
位于Executor
接口中
public interface Executor {void executor(Runnable command);
}
executor
提交的是无返回值的任务
下面是一个具体的例子
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
接口中
public interface ExecutorService {<T> Future<T> submit(Callable<T> task); <T> Future<T> submit(Runnable task, T result); Future<?> submit(Runnable task);
}
Future
也是一个接口,该接口定义了与任务执行结果相关的功能。
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
的具体例子
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(); }
}