03 2022 档案
摘要:如何监控线程池? 现在很多公司开始重视线程池的使用情况,所以掌握监控线程池很有必要。线程池一共有两个点需要监控,第一个点是线程的变化情况, 第二个点是任务的变化情况。 上面这三个方法是用来监控线程的变化情况。 下面这三个方法是用来监控任务的变化情况, 接下来自定义一个带监控功能的线程池,然后继承th
阅读全文
摘要:如何使用CompletionService? ComPletionservice有什么用?如果你的需求是按任务完成时间,先后顺序返回执行结果,那么推荐你使用它,例如这个动画演示了 线程池正在执行三个任务, 任务上的数字表示他们的执行时长,时长为一秒的任务最先完成, 其次是时长为两秒的任务, 最后是时
阅读全文
摘要:如何使用ForkJoinPool? 本节来学习如何使用focusjoinPool,更高效的执行大任务。focusjoinPool是一个采用ffocusjoin框架的线程池, 它继承自abstractExecutorservice, 说明他拥有线程池的基本功能,比如说和一般线程池一样提交任务,关闭线程
阅读全文
摘要:如何执行周期、重复性任务? 每隔一段时间执行一次任务,这样的任务叫周期性任务,也叫重复性任务。如果你想执行这样的任务,那么你需要用到scheduledExecutorService接口中的方法。 现在来依次介绍这两个方法,首先是以固定时间的方式重复执行任务的方法,scheduleAtFixedRat
阅读全文
摘要:如何执行定时、延时任务? 如果你想执行定时或延时的任务,那么你需要用到scheduledExecutorService接口中的方法。 在了解这些方法之前,我得先介绍该接口的实现类,也就是具备执行定时或延时任务的线程池。因为我们之前创建的线程池都没实现过该接口,所以他们不具备执行定时或延迟任务的功能,
阅读全文
摘要:如何执行批量任务? 如果你想让线程池执行批量任务,那么你可以试试invorkAll或invorkAny方法。 invorkAll 首先来看invorkAll方法,它的作用是执行批量任务,当所有任务完成时,返回future集合,也就是装有执行结果的集合。还有一个参数是将批量任务以集合的形式传递给线程池
阅读全文
摘要:什么是ForkJoin框架? 什么是focusjoin框架,focusjoin是一个把大任务分割成若干个小任务,在对每个小任务得到的结果进行汇总,得到大任务结果的框架,简而言之就是分割任务和合并结果, focusjoin中focus表示分割任务,join表示合并结果。 下面动画演示工作原理,这是一个
阅读全文
摘要:线程池是怎样执行任务的? 我曾经在一个面试中被问到,说说线程池是怎样执行任务的,由于对这个知识点不是很清楚,我当时很紧张,回答的不好,因此面试完当天我就恶补了这个知识点,现在来重温一下说到执行任务,我们就必须先谈谈提交任务。 提交任务的方式有两种,一种是execute,还有一种是submit。 这两
阅读全文
摘要:线程池状态及生命周期 线程池在其生命周期中会经历多种状态,这些状态被定义在threadPoolExecutor中,一共有5种。 这些状态所对应的描述如图所示, 下面几小节将介绍这些状态。 首先来看第一个状态,running,他表示线程池正在运行, 可以接受新任务,并且也能处理任务队列中的任务,下面动
阅读全文
摘要:shutdown 与 shutdownNow 的区别 今天介绍另一个关闭线程池的方法shoudownnow,本节内容有三个小节,第一小节介绍下shoudownnow,第二小节演示一个停不下来的任务。第三小节介绍shoudown与shoudownnow的区别。 介绍下shoudownnow 首先来看第
阅读全文
摘要:关闭线程池shutdown方法 这一节我们来shoudown方法,该方法的作用是关闭现身池,一般我们用它的时候都是写在finally大模块中, 为什么要关闭现身池?如果线程池用完不关闭的话,程序就不会结束,但是你关闭它的话程序才会结束。 shoudown方法它有两个特点, 第一个特点是调用shoud
阅读全文
摘要:四个任务拒绝策略该用哪一个? 在前面的课程中,我们学习了提交任务和取消任务,这一节我们来学习,当提交的任务被拒绝时该怎么办?线程池给我们提供了4个任务拒绝策略, 也就是4个解决办法,这4个策略分别对应4个类, 而且他们还以内部类的形式存在于所谓的threadPoolExecutor中。不仅如此,他们
阅读全文
摘要:1.使用B站看东西 2.使用b站下载资源 https://bilibili.iiilab.com/ 3.使用daum potplay,做视频自动截图 https://jingyan.baidu.com/article/73c3ce28e77c98e50243d96b.html 4.十行笔记自动翻译视
阅读全文
摘要:上一节我们学习了获取任务的get方法,这节我们来学习取消任务的cancel方法。 看似很简单的一个方法,却因为它的参数让无数开发者产生了疑惑,下面我们来看看是怎么回事。 分析 他有一个布尔类型的参数,如果为true的话,表示尝试中断正在执行任务的线程,也就是调用线程的interrupt的方法。这一点
阅读全文
摘要:上一节我们简单的介绍一下future,这一节我们来介绍它里面最常用的功能,那就是获取任务执行结果的get方法。当我们通过submit的方法向线程池中提交一个runnable任务或者是callable任务时,他们执行完会将结果封装在对象中,然后再返回给调用者,调用者在通过future的get方法获得结
阅读全文
摘要:提交任务的方式一共有两种,分别是execute和submit。 今天就来介绍他们两个以及他们的区别。 首先来看execute,该方法位于executor中,作用是向线程中提交runnable任务。 runnable任务大家都知道,他是一个无返回值的任务,也就是他执行完是没有返回结果给你的,所以exe
阅读全文
摘要:创建线程池的方式多种多样,但这三种千万别用在正式环境中,他们分别是固定大小的线程池和单个线程的线程池以及可缓存的线程池。 究竟有何风险,呆会儿再具体介绍他们的时候再说。这三种创建方式都在一个executors工具类中, 所有以new开头的方法都可以创建线程池, 一共有12个这样的方法,去掉重载方法后
阅读全文
摘要:线程池的创建 创建线程池的方式一共有八种, 但万变不离其宗,这个宗就是原生创建线程池的方式,这种方式也是阿里极力推荐的一种。在阿里巴巴Java开发手册的第七章第四小节中这样写道,线程时不允许一个executors去创建,而是通过threadpoolExecutor的方式去创建,其他的创建方式有资源耗
阅读全文
摘要:线程池作为java开发者必备技能,在日常开发中十分常见,所以从这一节开始我们介绍线程池。 今天的内容有两点,第一点,为什么要使用线程池?第二点,什么是线程池? 首先来看第一点,为什么要使用线程池? 在没有使用线程池之前,我们是如何执行任务的?这是一个任务,任务内容是输出当前线程名称,接下来我们来执行
阅读全文
摘要:前言 对灰度发布有所了解的同学应该知道,灰度发布的目的之一,就是能够根据业务规则的调整,交互上呈现不同的形式,举例来说,当前有2个版本,V1.0和V2.0 ,那么可能表现的形式大概有下面几种: V1.0,界面上的交互形态为A,V2.0版本界面上的交互形式为B;某个交互,针对同一个接口A来说,V1.0
阅读全文
摘要:起因,我设计数据库的时候一般情况下默认是不愿意让字段为空的,因为is null这样的话,是不走索引。所以我基本上设置了不为空。 因为设置了不为空,所以sql也要和原来的is null 变成="".之前用的逆向工程的andisnull查询就会失效。 1.创建数据库 2.创建脚本 CREATE TABL
阅读全文