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(); }
}