09 2020 档案

摘要:给线程池增加自动扩充,闲时自动回收线程的功能 首先我们给SimpleThreadPool定义三个成员属性:最小线程数量,活跃线程数量,最大线程数量。 同样构造方法修改一下: 我们程序默认开启最小线程数量,当他不够用的时候我们扩充到活跃线程数量,当活跃线程数量不够的时候我们扩充到最大线程数量。 那么应 阅读全文
posted @ 2020-09-23 11:29 风暴松鼠 阅读(1101) 评论(0) 推荐(0)
摘要:给线程池增加拒绝策略以及停止方法 昨天我们实现了一个简单的线程池,这个线程池可以重复利用线程,另外有个TASK_QUEUE任务队列,我们现在来加入拒绝策略,也就是TASK_QUEUE最多能接受多少队列,否则会挤爆LinkedList,TASK_QUEUE是作为缓冲的功能,但是一旦超过某个阈值可能会产 阅读全文
posted @ 2020-09-22 17:25 风暴松鼠 阅读(304) 评论(0) 推荐(0)
摘要:自定义一个简单的线程池 写在前面 在学习这个的时候,我一直在想,怎样理清思路,把中间的点一个一个串起来,然后自己默写出来,所以这个笔记我改了很多次,之前整理了很多理论知识,比如为什么使用线程池?线程池的优点等等,后来都删掉了。理论知识google一下,百度一下都写得非常好,所以我这里也没必要copy 阅读全文
posted @ 2020-09-21 21:39 风暴松鼠 阅读(289) 评论(0) 推荐(0)
摘要:ThreadGroup API介绍 TreadGroup其实是在1.5之前用的比较多,在没有线程池API前都使用TreadGroupApi来管理线程池。虽然现在有线程池API来供大家使用,但是如果在平时开发中只想启用三五个线程,那么可以选择使用TreadGroup来管理线程。 我们找到ThreadG 阅读全文
posted @ 2020-09-19 16:49 风暴松鼠 阅读(189) 评论(0) 推荐(0)
摘要:捕获线程运行期间的异常 上一篇文章我们学习了在我们使用application的时候在他出现问题或者人为终止的时候,我们怎么有机会捕获异常或者人为的做一些操作,比如写一些日志,或者发送一个RESTful或者关闭释放一些资源,那么线程运行期间的异常该如何捕获呢?我们知道线程的运行逻辑单元在run方法里, 阅读全文
posted @ 2020-09-19 12:54 风暴松鼠 阅读(233) 评论(0) 推荐(0)
摘要:如何给你的程序注入钩子 这里模拟一个场景,比如我要停止一个程序,那么我想在停止这个程序的时候做一些我们想要的操作,比如关闭ppt的时候自动保存一下ppt,类似的场景其实还有很多,因为windows下演示效果不是很好,我这里使用docker下的centos做演示: 运行效果如下: 利用nohup看一下 阅读全文
posted @ 2020-09-17 21:36 风暴松鼠 阅读(460) 评论(0) 推荐(0)
摘要:#sh #docker pull centos #docker images #docker run -it centos:latest /bin/bash #download jdk gz from centos MAINTAINER stormsquirrel hs96.cn@gmail.com 阅读全文
posted @ 2020-09-16 01:09 风暴松鼠 阅读(6914) 评论(0) 推荐(0)
摘要:如何实现一个自己的显式锁Lock 首先我们通过代码引出一个问题:如果方法上了同步锁并且被一个线程占有了,那么其他线程想执行这个方法就要一直等待下去,如果这个方法死循环或者无限执行下去,等待的线程就会无限等待下去,这里来演示一下这种场景: /** * @program: ThreadDemo * @d 阅读全文
posted @ 2020-09-14 00:49 风暴松鼠 阅读(225) 评论(0) 推荐(0)
摘要:第8篇文章在引入join使用场景的时候,有个信息采集功能的案例:有若干台采集服务器,然后还有一台主机,这台主机需要等待这若干台服务器信息采集完之后再做进一步的处理,一台采集服务器就对应一个线程,如之前写的代码: public class ThreadJoin3 { public static voi 阅读全文
posted @ 2020-09-08 01:40 风暴松鼠 阅读(337) 评论(0) 推荐(0)
摘要:wait和sleep的本质区别 先看一下他们的定义: **wait:**线程等待,调用该方法的线程进入 WAITING 状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用 wait()方法后,会释放对象的锁。因此,wait 方法一般用在同步方法或同步代码块中。 **sleep:**线程睡 阅读全文
posted @ 2020-09-07 02:46 风暴松鼠 阅读(478) 评论(0) 推荐(0)
摘要:使用notifyAll完善多线程下的生产者消费者模型 我们先看一下wait()的代码注释: 使当前线程等待,直到另一个线程调用了这个对象的notify()或notifyAll()方法,换句话说,这个方法是执行了wait(0); 当前线程必须拥有该对象的监视器。线程释放此监视器的所有权,并等待另一个线 阅读全文
posted @ 2020-09-07 01:03 风暴松鼠 阅读(129) 评论(0) 推荐(0)
摘要:多Product多Consumer之间的通讯导致出现程序假死的原因分析 继续上篇文章,我们来吧单个生产者消费者改成多个生产者消费者,这里使用java8的Stream,代码如下: /** * @program: ThreadDemo * @description: 线程通信(生产者-消费者) * @a 阅读全文
posted @ 2020-09-06 20:04 风暴松鼠 阅读(188) 评论(0) 推荐(0)
摘要:生产者消费者案例,使用wait和notify进行线程间的数据通信 之前学习了线程同步的只是,接下来学习一下线程间的通信相关的知识,这里简单来一个生产者消费者的案例来作为入门,实现效果需为生产者生产一个数字,消费者消费一个数字,代码如下: public class ProduceConsumerVer 阅读全文
posted @ 2020-09-06 18:43 风暴松鼠 阅读(204) 评论(0) 推荐(0)
摘要:多线程死锁案例以及查看方法 我们先定义一个类调用DeadLock和OtherService。 public class DeadLockTest { public static void main(String[] args) { DeadLock deadLock = new DeadLock() 阅读全文
posted @ 2020-09-06 16:28 风暴松鼠 阅读(267) 评论(0) 推荐(0)
摘要:This锁和Class锁 This锁 接下来代码理解一下This锁: /** * @program: ThreadDemo * @description: This锁的实验 * @author: hs96.cn@Gmail.com * @create: 2020-09-06 */ public cl 阅读全文
posted @ 2020-09-06 11:27 风暴松鼠 阅读(414) 评论(0) 推荐(0)
摘要:同步代码块以及同步方法之间的区别和关系 上一篇文章我们是使用了同步代码块的方式改进了银行排队取号程序,接下来我们把锁放在方法上试一下: public class TicketWindowRunnable implements Runnable { private int index = 1; pri 阅读全文
posted @ 2020-09-05 18:34 风暴松鼠 阅读(244) 评论(0) 推荐(0)
摘要:线程同步问题以及synchronized的引入 我们之前写了个模拟银行排队叫号的demo,这里为了说明问题我把代码稍加改造: public class TicketWindowRunnable implements Runnable { private int index = 1; private 阅读全文
posted @ 2020-09-05 18:05 风暴松鼠 阅读(159) 评论(0) 推荐(0)
摘要:编写ThreadService实现暴力结束线程 上一篇文章最后留下了一个问题,就是如果线程后面被阻塞了,该怎么办?这结合之前学过的ThreadApi写一个ThreadService来暴力结束线程。大致思路是:任务线程设置为调用线程的守护线程,通过main来启动调用线程,从而执行任务线程。当需要停止线 阅读全文
posted @ 2020-09-05 17:09 风暴松鼠 阅读(180) 评论(0) 推荐(0)
摘要:Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期 在jdk中关于interrupt相关方法有三个: 简单来使用一下interrupt: /** * @program: ThreadDemo * @description: 线程中断 * @author: hs96.cn@Gm 阅读全文
posted @ 2020-09-03 23:05 风暴松鼠 阅读(262) 评论(0) 推荐(0)
摘要:Thread的join方法 关于join官方的解释是 Waits for this thread to die. 也就是等待一个线程结束。 我们来先来一段代码来引入join的使用场景(这里使用了java8的IntStream) /** * @program: ThreadDemo * @descri 阅读全文
posted @ 2020-09-03 00:04 风暴松鼠 阅读(2401) 评论(0) 推荐(0)