JUC
LoserJohn8614
这个作者很懒,什么都没留下…
展开
-
异常信息:java.lang.IllegalMonitorStateException
异常信息:java.lang.IllegalMonitorStateException异常信息:原因分析:解决方案: 异常信息: java.lang.IllegalMonitorStateException 原因分析: 当前的线程不是此对象监视器的所有者,方法上使用了synchronized关键字,但是方法体内使用了condition.await()方法和condition.signal()方法。 解决方案: 去掉方法上的synchronized关键字,在方法体内添加lock.lock()和lock.unl原创 2020-11-22 22:26:13 · 262 阅读 · 0 评论 -
使用JDK中的JUC中的延时队列来自定义定时任务
自定义定时任务 通过JDK自带了多种实现定时任务的接口:juc中的线程池,定时器Timer,死循环,juc延时队列。我们就使用juc延时队列来实现自定义的定时任务。 适用场景 周报、月度报表之类的统计数据任务。 优点: 异步执行、实现代码的解耦合 数据批量处理 时间驱动 实现代码 创建自定义定时任务类,实现Delay接口 class DelayTask implements Delayed { private long timeout;//任务执行时间 private DelayQueu原创 2020-11-20 22:15:51 · 312 阅读 · 0 评论 -
使用JDK原生的ReentrantLock读写锁解决写操作并发问题
使用JDK原生的ReentrantLock读写锁解决写操作并发问题 ReentrantLockDemo 测试类 public class ReadWriteLockDemo { public static void main(String[] args) { MyCache myCache = new MyCache(); for (int i = 1; i <= 5; i++) { final int it = i;原创 2020-11-13 22:25:52 · 176 阅读 · 0 评论 -
好玩的不可思议的ThreadPool线程池
好玩的、不可思议的ThreadPool线程池 JDK1.5为我们新增了两种实现多线程的方式:线程池和Callable接口,本次我们来玩一下线程池。 首先,介绍一下ThreadPoolExecutor的构造函数及其7个参数的内容: 其次,我们来看一下线程池执行任务的流程: ThreadPoolExecutor源码对execute方法的说明: 其本质就是ThreadPool线程池的执行任务流程,用流程图示意如下: 在单轮次的多个任务过来时,线程池中的线程执行任务时完全符合上述规律。 那么,如果我们在线程池原创 2020-11-01 18:32:25 · 102 阅读 · 0 评论