Java线程池入门04


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. ExecutorSubmit的区别


相关推荐
脑子慢且灵13 小时前
C语言与Java语言编译过程及文件类型
java·c语言·开发语言·汇编·编辑器
蒙奇D索大13 小时前
【C语言加油站】C语言文件操作详解:从“流”的概念到文件的打开与关闭
c语言·开发语言·笔记·学习·改行学it
是2的10次方啊13 小时前
看完JDK、Spring官方架构图,我发现:大厂的图也就这样!
java
ZhengEnCi13 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot
程序员小假13 小时前
我们来说一说 Java 自动装箱与拆箱是什么?
java·后端
❀͜͡傀儡师14 小时前
Spring 前后端通信加密解密
java·后端·spring
武子康14 小时前
Java-144 深入浅出 MongoDB BSON详解:MongoDB核心存储格式与JSON的区别与应用场景
java·开发语言·数据库·mongodb·性能优化·json·bjson
聪明的笨猪猪14 小时前
Java Spring “事务” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
爱喝水的鱼丶14 小时前
SAP-ABAP:SAP中的用户确认对话框:深入理解与实践POPUP_TO_CONFIRM
运维·开发语言·学习·sap·abap
云飞云共享云桌面14 小时前
东莞精密机械制造工厂如何10个SolidWorks共用一台服务器资源
java·运维·服务器·网络·数据库·电脑·制造