![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 65
思想者0001
这个作者很懒,什么都没留下…
展开
-
Java 线程池的异常处理机制 错误使用submit导致异常被吞掉,导致UncaughtExceptionHandler不生效
一、前言线程池技术是服务器端开发中常用的技术。不论是直接还是间接,各种服务器端功能的执行总是离不开线程池的调度。关于线程池的各种文章,多数是关注任务的创建和执行方面,对于异常处理和任务取消(包括线程池关闭)关注的偏少。接下来,本文将从 Java 原生线程、两种主要线程池 ThreadPoolExecutor 和 ScheduledThreadPoolExecutor 这三方面介绍 Java 中线程的异常处理机制。二、Thread在谈线程池的异常处理之前,我们先来看 Java 中线程中的异常是如何被处转载 2021-05-25 15:04:24 · 3836 阅读 · 0 评论 -
Redis-Cell实现分布式限流
环境要求基于redis 4.0 的单点或者集群GLIBC_2.18redis-cell使用说明命令示例:CL.THROTTLE key_test 100 400 60 3CL.THROTTLE: redis命令key_test : redis key100: 官方叫max_burst,初始值,不能为0200: 在指定时间窗口内允许访问的次数60: 指定的时间窗口,单位:秒3: 表示本次要申请的令牌数,不写则默认为 1响应如下:127.0.0.1:6379> CL.T原创 2020-07-20 19:40:27 · 1411 阅读 · 0 评论 -
java stop方法为什么不能用?
一方面stop线程非常粗暴,除非可能执行finally代码块以及释放synchronized外,线程将直接被终止,非常粗暴,此外如果线程持有JUC的互斥锁,还可能导致锁来不及释放,造成其他线程永远等待的局面。JUC是Lock不是自动释放的,需要主动释放并且要在finally代码块中释放,实际上是stop一个线程并不会跳过finally代码块,但是如果还没有执行try代码块就被stop了,那就不会执行finally代码块,这会造成"锁"永远不会释放,而其他线程永远无法获取锁的尴尬局面了。测试代码:pub原创 2020-07-07 23:09:00 · 818 阅读 · 0 评论 -
Java 多线程 深入理解volatile语义
1、解决可见性问题CPU为了避免频繁读内存导致的性能降低,所以CPU内部设计了寄存器和高速缓存来提供数据访问速度。1、线程重复读取一个变量时,会使用缓存中的值,而不会读内存,所以存在读提前。2、线程首次从内存读取某个变量的同时会缓存附近的数据,所以存在读提前。3、线程写变量时,会先写入CPU缓存,然后异步刷新到内存,所以存在写延迟。因为读提前,所以当线程读取某个变量时,可能并不是从内存中读取,而是来自CPU缓存,那么不同的线程中见到的变量可能因为加载到缓存中的时间不同而不同;因为写延迟,多线程中原创 2020-07-03 16:52:11 · 274 阅读 · 0 评论