![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 94
Ch.yang
try{ coding } catch { bug }
展开
-
【Java_基础深入】SimpleDateFormat.format()线程不安全的起因与解决方案
追踪问题网上找到的最多讨论的就是 calendar的线程不安全操作传递到了SimpleDateFormat针对Calendar进行断点观察,观察其值的变化观察calendar的赋值链SimpleDateFormat实例化过程1: calendar初始化的位置追踪上层方法:2.1 疑惑:无参构造调用了有参的构造方法,初始化了calendar2.2 解惑:无参构造中使用了this...原创 2019-12-29 23:12:44 · 1146 阅读 · 0 评论 -
【java_多线程】模拟银行转账,为保证原子性而引发死锁,检测死锁并解决
前言本例子不是实际的生产模型,只是为了更好研究死锁而举的例子需求james 转账给 jay 20 元,需要保证转账过程原子性操作能加锁的前提每个对象都有一个monitor,用于维护自身的锁状态,换句话说,所有对象都可以作为一把锁每个用户的monitor就可以作为一把锁,并且这把锁是互斥的,暂且称作读写锁用加锁实现原子性锁规则每个用户都持有账户的一把读写锁,可以自己持有,也可以被...原创 2019-11-22 17:54:16 · 1330 阅读 · 0 评论 -
【java_多线程】多线程核心问题
有多少种实现线程的方法?思路有5点摆明立场从不同的角度看,会有不同的答案我认为本质上都是实现Runnable 和继承Thread举出例子线程池的Worker 本质上是一个线程安全的RunnableFutureTask 是使用Future接口拓展的一个RunnableTimerTask 也是一个Runnable一个线程两次调用start()方法会出现什么情况?为什么会抛出异常...原创 2019-11-23 21:41:57 · 258 阅读 · 0 评论 -
【java_基础深入】ThreadPoolExecutor.execute() 源码分析
第一层:初见阻塞队列BlockingQueue、任务载入方法Worker.addWorker()思考:corePoolSize BlockingQueue 如何直接参与调度出现了的Worker是什么为什么没有出现maximumPoolSize public void execute(Runnable command) { //线程池指标: 获取线程池状态 + 活跃线程数 (使用二...原创 2019-11-17 16:23:10 · 588 阅读 · 0 评论 -
【java_多线程】让线程阻塞,获取其他线程的返回值 ,使用AQS组件实现
1. 传统方式 Thread.join() /** * 使用传统方式启动线程,执行任务,实现阻塞 * * @see Thread#join() * */ public static void main(String[] args) { Thread thread = new Thread(new Runnable() {...原创 2019-10-29 21:39:14 · 679 阅读 · 0 评论