首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Java避坑指南:ScheduledThreadPoolExecutor避坑之异常信息会丢失,任务不再继续被调度的源码分析

简介 ---- 在上篇博文中提到了ScheduledThreadPoolExecutor的一个坑:异常信息会丢失,任务不再继续被调度: Java避坑指南:ScheduledThreadPoolExecutor...避坑 下面我们以源码的形式分析这种情况。...: ScheduledThreadPoolExecutor#scheduleAtFixedRate 为例: 当线程池中的核心线程从队列中获取任务执行时: ScheduledThreadPoolExecutor.ScheduledFutureTask...我们看一下如果被调度的任务抛出异常,super.runAndReset()返回true还是fals: 异常发生后,会保存异常,不再抛出,不主动调用Future#get(),异常信息会丢失,调度任务一般不会调用...小结 ---- 使用ScheduledThreadPoolExecutor来周期性的调度任务时,我们一定不要抛出异常,从而导致异常信息丢失,也导致周期性被调度的任务不再继续被调度执行。

41430

TransmittableThreadLocal使用线程池等会缓存线程的组件情况下传递ThreadLocal

1、简介 TransmittableThreadLocal 是Alibaba开源的、用于解决 “使用线程池等会缓存线程的组件情况下传递ThreadLocal” 问题的 InheritableThreadLocal...但对于使用线程池等会池化复用线程的组件的情况线程线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal值传递已经没有意义,应用需要的实际上是把 任务提交给线程池时的ThreadLocal...但对于使用线程池等会池化复用线程的组件的情况线程线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal值传递已经没有意义,应用需要的实际上是把 任务提交给线程池时的ThreadLocal...目前TTL Agent中,修饰了JDK中的线程池实现如下: java.util.concurrent.ThreadPoolExecutor 和 java.util.concurrent.ScheduledThreadPoolExecutor...ScheduledThreadPoolExecutor实现更强壮,并且功能更丰富。 如支持配置线程池的大小(Timer只有一个线程);TimerRunnable中抛出异常会中止定时执行。

1.5K20

【小家java】Java定时任务ScheduledThreadPoolExecutor详解以及与Timer、TimerTask的区别(执行指定次数停止任务)

Timer和TimerTask 本文先介绍Java最原始的解决方案:Timer和TimerTask Timer和TimerTask可以作为线程实现的第三种方式,JDK1.3的时候推出。...可以程序任何地方调用,甚至TimerTask中的run方法中调用; 设置Timer对象为null,其会自动终止; 用System.exit方法,整个程序终止。...下面例子: 启动一个timer任务,执行指定次数/时间后停止任务 备注:该示例在某些特殊的场景会很有用的,比如守护监控、守护检查等等 /** * 定时器 * * @author fangshixiang...* (阶段性定时任务) * 备注:若单线程就能搞定,就使用timer即可,若需要多线程环境,请使用JDK5提供的ScheduledThreadPoolExecutor *...构造方法: ScheduledThreadPoolExecutor(int corePoolSize) //使用给定核心池大小创建一个新定定时线程ScheduledThreadPoolExecutor

3.4K20

Java中如何优雅的停止一个线程?可别再用Thread.stop()了!

写在开头 经过上几篇博文的学习,我们知道Java中可以通过new Thread().start()创建一个线程,那今天我们就来思考另外一个问题:线程的终止自然终止有两种情况: 1....线程的任务执行完成; 2. 线程执行任务过程中发生异常。 start之后,如果线程没有走到终止状态,我们该如何停止这个线程呢?...因此,在这里强烈建议大家不要再用stop方法去停止线程了!...().isInterrupted()可能在某些情况下中断失效,所以我们这里自定义一个stop变量,作为线程中断的标识,检测线程启动先对标识位进行判断。...监控任务启动 10 秒后,停止... 任务执行被中断... 与我们的预期一样,监控线程执行了3个循环的检测任务后,被成功中断调。到这里,我们就成功的、安全的、优雅的停止了一个线程啦!

16500

【小家Spring】Spring任务调度核心接口(类)之---TaskScheduler(任务调度器)、Trigger(触发器)、ScheduledTask(调度任务)详解

前言 先推荐阅读此篇: 【小家java】Java定时任务ScheduledThreadPoolExecutor详解以及与Timer、TimerTask的区别(执行指定次数停止任务) 某些时候我们可能需要在某些固定的时间或者是间隔一定的时间连续执行一些任务...,决定下一次的执行计划时是否要考虑上次任务什么时间执行完成。...默认情况下PeriodicTrigger使用了fixedDelay模式。...//获取当前活动的线程数 委托给ScheduledThreadPoolExecutor来做得 public int getActiveCount() { if (this.scheduledExecutor...(当然我们这里只放了两个~~~) ConcurrentTaskScheduler 以单个线程方式执行定时任务,适用于简单场景;(以当前线程执行任务。

3.2K30

【死磕Java并发】-----J.U.C之线程池:线程池的基础架构

在这个部分你将了解到下面几个部分: 线程池的基础架构 线程池的原理分析 线程池核心类的源码分析 线程池调优 Executor 我们先看线程池的基础架构图: ?...ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor继承ThreadPoolExecutor并且实现ScheduledExecutorService...其接口定义如下: public interface Future { /** * 试图取消对此任务的执行 * 如果任务已完成、或已取消,或者由于某些其他原因而无法取消,则此尝试将失败...* 如果任务已经启动,则 mayInterruptIfRunning 参数确定是否应该以试图停止任务的方式来中断执行此任务的线程 */ boolean cancel(boolean mayInterruptIfRunning...public interface RunnableFuture extends Runnable, Future { //未被取消的情况下,将此 Future 设置为计算的结果

62750

【小家Java】一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结

内存情况逐渐攀升,最终可以看出程序近乎停止。...下面是程序启用和停止的内存情况: ? ? 综上所诉,我们的猜想是正确的。如果消费的速度小于生产的速度,内存随着时间的堆积,很快就能被打满了。...终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程使用CachedThreadPool时,一定要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统瘫痪。...(corePoolSize); } 来看看ScheduledThreadPoolExecutor()的构造函数: public ScheduledThreadPoolExecutor(int corePoolSize...附:ThreadFactory简单介绍 ThreadFactory是一个线程工厂。用来创建线程。这里为什么要使用线程工厂呢?其实就是为了统一创建线程时设置一些参数,如是否守护线程

9.9K43

阿里大佬带你,深入理解线程池底层原理

addWorker(command, false)) reject(command); } execute()执行过程: execute方法执行逻辑有这样几种情况: (1)如果当前运行的线程少于...shutdown和shutdownNow还是有不一样的地方: shutdownNow首先将线程池的状态设置为STOP,然后尝试停止所有的正在执行和未执行任务的线程,并返回等待执行任务的列表 shutdown...还是ScheduledThreadPoolExecutor设计时的三个关键要素是:任务、执行者以及任务结果。...任务 ThreadPoolExecutor和ScheduledThreadPoolExecutor中任务是指实现了Runnable接口和Callable接口的实现类。...任务结果 ThreadPoolExecutor中提交任务后,获取任务结果可以通过Future接口的类, ThreadPoolExecutor中实际上为FutureTask类, 而在ScheduledThreadPoolExecutor

62820

Java的ThreadPoolExecutor

ScheduledThreadPoolExecutor下次再讲。...; 创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务,除非调用了prestartAllCoreThreads()或者prestartCoreThread()方法...默认情况下,创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把新加入的任务放到缓存队列当中,缓存队列由构造方法中的...极端情况下,CachedThreadPool会因为创建过多线程而耗尽CPU和内存资源。 ?...线程停止 1 单线程停止 Java虚拟机会先将该线程的中断标识位清除,然后抛出InterruptedException,因为发生InterruptedException异常的时候,会清除中断标记。

62520

Java并发——线程池(八)

默认情况下,核心线程会一直存活,但是当将allowCoreThreadTimeout设置为true时,核心线程超时也会回收。...maximumPoolSize参数构造函数中,maximumPoolSize为线程池所能容纳的最大线程数。...Handler参数任务拒绝策略,当达到最大线程数且队列任务已满时需要执行的拒绝策略拒绝时机首先,拒绝策略是新建线程池的时候制定的,拒绝时机如下:第一种情况是当我们调用 shutdown 等方法关闭线程池后...第二种情况线程池没有能力继续处理新提交的任务,也就是工作已经非常饱和的时候。也就是说线程池核心线程满了-> 然后任务队列满了->然后非核心线程也满了,这个时候再提交任务就会触发拒绝策略。...这在某些应用场景中可能不是最佳选择4、缺乏灵活性和透明度使用Executors快捷方法创建的线程池隐藏了许多重要的配置细节,比如线程数量和任务队列类型,这降低了配置的灵活性和透明度使用线程时,可以直接调用

8000

一个ScheduledExecutorService启动的Java线程无故挂掉引发的思考

2018年12月12日18:44:53 一个ScheduledExecutorService启动的Java线程无故挂掉引发的思考 案件现场 不久前,开发改造公司一个端到端监控日志系统的时候,出现了一个...$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor...$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor...也就是说,如果使用者抛出异常,ScheduledExecutorService 将会停止线程的运行,而且不会报错,没有任何提示信息。 这就是日志中和控制台都没有看到打印异常信息的原因。...启动的Java线程无故挂掉的原因是:如果使用者抛出异常,ScheduledExecutorService 将会停止线程的运行,而且不会报错,没有任何提示信息。

65810

Java 定时任务实现原理详解

实现原理+源码解析 由于ScheduledThreadPoolExecutor是基于线程池实现的。所以了解它的原理之前读者有必要先了解一下Java线程池的实现。...只有任务的时间到了,worker线程才能从延迟队列中获取到任务并执行。 ScheduledThreadPoolExecutor中,定义了DelayedWorkQueue类来实现延迟队列。...三、Timer和ScheduledThreadPoolExecutor的区别 由于Timer是单线程的,如果一次执行多个定时任务,会导致某些任务被其他任务所阻塞。...而ScheduledThreadPoolExecutor是基于线程池的,可以动态的调整线程的数量,所以不会有这个问题 如果执行多个任务,Timer中一个任务的崩溃会导致所有任务崩溃,从而所有任务都停止执行...总体来说,Timer除了版本兼容性上面略胜一筹以外(Timer是jdk1.3就支持的,而ScheduledThreadPoolExecutorjdk1.5才出现),其余全部被ScheduledThreadPoolExecutor

71210

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券