2018年11月9日
摘要: 内存可见性 由于 Java 内存模型(JMM)规定,所有的变量都存放在主内存中,而每个线程都有着自己的工作内存(高速缓存)。 线程在工作时,需要将主内存中的数据拷贝到工作内存中。这样对数据的任何操作都是基于工作内存(效率提高),并且不能直接操作主内存以及其他线程工作内存中的数据,之后再将更新之后的数 阅读全文
posted @ 2018-11-09 15:57 断剑重铸之时 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见,但是我们可以指定某些规则,这规则就是happens-before,从JDK 5 开始,JMM就使用happens-before的概念来阐述多线程之间的内存可见性。 在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间 阅读全文
posted @ 2018-11-09 15:20 断剑重铸之时 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 一、Vector和SynchronizedList 1.1回顾线程安全的Vector和SynchronizedList 我们知道ArrayList是用于替代Vector的,Vector是线程安全的容器。因为它几乎在每个方法声明处都加了synchronized关键字来使容器安全。 如果使用Collec 阅读全文
posted @ 2018-11-09 15:13 断剑重铸之时 阅读(1739) 评论(0) 推荐(0) 编辑
摘要: 线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTa 阅读全文
posted @ 2018-11-09 15:05 断剑重铸之时 阅读(4131) 评论(0) 推荐(0) 编辑