当前位置: 首页 > news >正文

Java线程池入门04


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

![[Pasted image 20250225111703.png]]

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个方法的相关功能
![[Pasted image 20250225111944.png]]

下面是一个使用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();  
    }  
}

4. ExecutorSubmit的区别


![[Pasted image 20250225113831.png]]

相关文章:

  • Neo4j 图数据库安装与操作指南(以mac为例)
  • SpringBatch简单处理多表批量动态更新
  • python的列表和元组别再傻傻分不清啦
  • Java 大视界 -- Java 大数据分布式文件系统的性能调优实战(101)
  • 序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?
  • 利用2600分钟开发springboot3+vue3+mybatis保姆级项目总结
  • 天猫代运营公司推荐:品融电商
  • 若依框架集成阿里云OSS
  • CentOS7最小化安装中使用curl安装yum和wget
  • Solr中得Core和Collection的作用和关系
  • 解决Moodo调节心情模块-大声喊出来无法测量出音频分贝
  • 怎么获取免费的 GPU 资源完成大语言模型(LLM)实验
  • P9231 [蓝桥杯 2023 省 A] 平方差--巧妙统计奇数的个数!
  • Java SE与Java EE
  • 【力扣】2620. 计数器——认识闭包
  • FreeRTOS(3)列表List
  • apache-maven-3.2.1
  • 从2D到3D:电商技术的飞跃,开启沉浸式购物之旅
  • 一个行为类似标准库find算法的模板
  • ARM 处理器平台 eMMC Flash 存储磨损测试示例
  • wordpress 网站工具栏/外包公司是什么意思
  • 地方信息网站源码/武汉软件测试培训机构排名
  • 动态网站流程/推广引流app
  • 国外一个做ppt的网站/seo关键词优化费用
  • hao123网址之家设为主页/咖啡seo是什么意思
  • 用网站做数据库吗/seo百度站长工具