
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 · 321 阅读 · 0 评论 -
使用JDK中的JUC中的延时队列来自定义定时任务
自定义定时任务通过JDK自带了多种实现定时任务的接口:juc中的线程池,定时器Timer,死循环,juc延时队列。我们就使用juc延时队列来实现自定义的定时任务。适用场景周报、月度报表之类的统计数据任务。优点:异步执行、实现代码的解耦合数据批量处理时间驱动实现代码创建自定义定时任务类,实现Delay接口class DelayTask implements Delayed { private long timeout;//任务执行时间 private DelayQueu原创 2020-11-20 22:15:51 · 362 阅读 · 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 · 226 阅读 · 0 评论 -
好玩的不可思议的ThreadPool线程池
好玩的、不可思议的ThreadPool线程池JDK1.5为我们新增了两种实现多线程的方式:线程池和Callable接口,本次我们来玩一下线程池。首先,介绍一下ThreadPoolExecutor的构造函数及其7个参数的内容:其次,我们来看一下线程池执行任务的流程:ThreadPoolExecutor源码对execute方法的说明:其本质就是ThreadPool线程池的执行任务流程,用流程图示意如下:在单轮次的多个任务过来时,线程池中的线程执行任务时完全符合上述规律。那么,如果我们在线程池原创 2020-11-01 18:32:25 · 138 阅读 · 0 评论