- 博客(8)
- 问答 (1)
- 收藏
- 关注
原创 线程池关闭流程
线程池的状态转换:关闭线程池的方法shutdown():把线程池状态修改为SHUTDOWN,并通过interruptIdleWorkers()中断所有空闲工作者线程。shutdownNow():把线程池状态修改为STOP,并通过interruptWorkers()中断所有工作者线程。 shutdownNow()会中断正在工作的工作者线程,也仅仅是中断目标线程,但目标线程不一定响应中断或者已处理中断异常,它并不是停止目标线程。线程池是如何判断工作者线程是空闲还是忙碌呢? 工作者线程W
2020-08-18 17:46:39 1029 1
原创 线程池拒绝策略bug?
首先看一下任务提交的流程: 线程池的最大线程数为2,任务队列大小为1,理论上最多同时可提交3个任务,但实际却触发了拒绝策略。public static void main(String[] args) throws InterruptedException { ThreadPoolExecutor tp = new ThreadPoolExecutor(0, 2, 100, TimeUnit.DAYS, new LinkedBlockingDequ
2020-08-18 16:10:32 373 3
原创 线程池回收工作者线程原理
线程池是如何回收工作者线程的 首先线程池的工作者线程是不区分它是核心线程还是非核心线程的,那么线程池是如何回收掉非核心线程?又如何保证核心线程不会被回收?当然你也可以allowCoreThreadTimeOut(true)设置核心线程也过期。runWorker()源码解析工作者线程就是执行run()方法,然后内部调用runWorker()final void runWorker(Worker w) { Thread wt = Thread.currentThread();
2020-08-18 15:29:35 1060
原创 ThreadLocal 内存泄漏
个人对内存泄漏的理解:如果一个我用不到对象一直内存里,那么它就是内存泄漏。TheadLocal实现原理: 通过线程私有的空间来存储数据,即在Thread类里有一个ThreadLocalMap类型的变量:/* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */ThreadLocal.ThreadLocalMap thread...
2020-07-28 09:11:31 231
原创 Redis分布式锁实现(简洁实现)
实现原理: 加锁:使用Redis命令,set key value NX,当key不存在时,此操作才可成功。所以当对一个key多次执行此操作时,只有一个线程能够成功,即满足了锁的互斥性。但如果客户端在成功加锁后,没有释放锁(可能是程序员粗心,也可能是系统崩溃等不可抗力因素),此时无论是谁都无法加锁,从而导致死锁,所以在加锁时需要设置key的过期时间,即set key value EX ...
2020-03-05 15:12:57 220
原创 MySQL统计1的个数 多个连续的1视作只有一个1
MySQL统计1的个数,多个连续的1视作一个1: 上图的统计结果应该是4个1。 这里我使用使用自定义变量来实现: 查询结果为预期的4条记录,但是如果重复执行该sql,发现结果不一样: 这是因为MySQL自定义变量对于仅对于此次连接有效,也就是在一个连接里是共享的。而最后一条记录(id=16)的值为1,在一次查询结束后@...
2019-12-21 17:30:31 617
原创 postgresql查询取别名时大小写问题
PostgreSQL的一个"特别"之处,给数据列取的别名被完全转成小写了。在取别名时加上"就可以解决这一问题。截图如下:
2018-08-06 09:39:54 4812 4
原创 Spring Data JPA 学习笔记
1、实体类无法继承父类属性的解决办法@MappedSuperclass//在父类上添加此注解public class BasePO2、列名与数据库关键字冲突的解决办法@Column(name = "`index`", nullable = true)//使用``包围列名public Integer getIndex() { return index;}
2018-01-15 11:54:57 261
空空如也
关于线程池引发的问题
2020-06-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人