写BUG的派大星

Patrick Star

  • 首页
  • 归档

  • 搜索
设计模式 Gis Kafka Druid 微信小程序 Java 开源项目源码 物体识别 机器学习 Mybatis 微服务 Feign OpenVPN CSS Streamsets CDH SpringCloud SpringBoot maven 分布式 Shell Tree Linux js WebSocket 多线程 集群 Hadoop 大数据 JDK ElasticSearch MySQL 数据库 Redis Http Nginx

Java线程池相关(未完待续)

发表于 2020-03-27 | 分类于 Java | 0 | 阅读次数 803

JDK四种线程池

// 创建一个不限线程数上限的线程池,任何提交的任务都将立即执行
Executors.newCachedThreadPool(); 

//创建固定大小的线程池
Executors.newFixedThreadPool(3);

// 定时执行的线程池
Executors.newScheduledThreadPool(3);

// 创建一个只有一个线程的线程池
Executors.newSingleThreadPool();

线程池创建的参数列表

image.png

工作顺序

corePoolSize -> 任务队列 -> maximumPoolSize -> 拒绝策略

常见的拒绝策略

拒绝策略拒绝行为
AbortPolicy抛出RejectedExecutionException,是线程池默认的策略
DiscardPolicy什么也不做,直接忽略
DiscardOldestPolicy丢弃执行队列中最老的任务,尝试为当前提交的任务腾出位置
CallerRunsPolicy直接由提交任务者执行这个任务

获取处理结果和异常

线程池的处理结果、以及处理过程中的异常都被包装到Future中,并在调用Future.get()方法时获取,执行过程中的异常会被包装成ExecutionException,submit()方法本身不会传递结果和任务执行过程中的异常。可以通过重写Callable中的call()方法来获取

ExecutorService executorService = Executors.newFixedThreadPool(4);
Future<Object> future = executorService.submit(new Callable<Object>() {
        @Override
        public Object call() throws Exception {
            throw new RuntimeException("exception in call~");// 该异常会在调用Future.get()时传递给调用者
        }
    });
	
try {
  Object result = future.get();
} catch (InterruptedException e) {
  // interrupt
} catch (ExecutionException e) {
  // exception in Callable.call()
  e.printStackTrace();
}

Java中创建多线程方式有几种

实现方式有三种:Callable、Runnable、继承Thread类;

但是底层都是通过new Thread();

Callable和Runnable的区别

Callable允许有返回值,允许抛出异常,是在JDK1.5中加入的接口,对Runnable的一种补充

  • 本文作者: Patrick
  • 本文链接: https://www.write1bug.cn/archives/java线程池相关未完待续
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 设计模式 # Gis # Kafka # Druid # 微信小程序 # Java # 开源项目源码 # 物体识别 # 机器学习 # Mybatis # 微服务 # Feign # OpenVPN # CSS # Streamsets # CDH # SpringCloud # SpringBoot # maven # 分布式 # Shell # Tree # Linux # js # WebSocket # 多线程 # 集群 # Hadoop # 大数据 # JDK # ElasticSearch # MySQL # 数据库 # Redis # Http # Nginx
Hashmap源码解析
关于WebSocket
  • 文章目录
  • 站点概览
Patrick

Patrick

不是在改BUG,就是在写BUG。

52 日志
9 分类
36 标签
RSS
E-mail
Creative Commons
© 2018 — 2023 Patrick
人生如逆旅|我亦是行人
鲁ICP备18043140号-1