Java内存模型FAQ

原文:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html  译者:Alex,方腾飞

目录

  1. 什么是内存模型?
  2. 其他语言,像c++,也有内存模型吗?
  3. JSR 133是什么?
  4. 重排序是什么?
  5. 旧内存模型有什么错误?
  6. 没有正确同步的含义是什么?
  7. 同步会做些什么呢?
  8. final字段如何改变它们的值?
  9. 在新的JMM下final字段是如何工作的?
  10. volatile是干什么用的?
  11. 新内存模型是否修复了双重锁检查问题?
  12. 如果我要实现一个JVM,我需要做什么?
  13. 为什么要关注JMM?

Java内存模型FAQ(一) 什么是内存模型

原文:http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html 第一章 译者:方腾飞

在多核系统中,处理器一般有一层或者多层的缓存,这些的缓存通过加速数据访问(因为数据距离处理器更近)和降低共享内存在总线上的通讯(因为本地缓存能够满足许多内存操作)来提高CPU性能。缓存能够大大提升性能,但是它们也带来了许多挑战。例如,当两个CPU同时检查相同的内存地址时会发生什么?在什么样的条件下它们会看到相同的值?

阅读全文

并发编程推荐书籍和文章

1: java并发编程实战

Java并发编程实战

豆瓣地址:http://book.douban.com/subject/10484692/

2:多处理器编程的艺术

多处理器编程的艺术

豆瓣地址:http://book.douban.com/subject/3901836/

3:推荐系列文章

  1. IBM developerWorks 中国 : Java 多线程与并发编程专题 http://t.cn/SVFmtH
  2. 原阿里同事@武汉伢袁志俊 写的“探索并发编程”系列文章http://t.cn/aF7gqD
  3. 深入浅出java并发编程http://t.cn/hGJNqw by @饭饭泛

4:推荐精品文章

  1. 阿里同事悟时写的一种高效无锁内存队列的实现
  2. Hadoop并行计算原理与分布式并发编程 http://t.cn/zlsBCHk

聊聊并发(五)原子操作的实现原理

本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/atomic-operation

1    引言

原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。

阅读全文

聊聊并发系列文章

聊聊并发系列文章是我在InfoQ发表的并发编程连载文章。

  1. 聊聊并发(一)深入分析Volatile的实现原理
  2. 聊聊并发(二)Java SE1.6中的Synchronized
  3. 聊聊并发(三)Java线程池的分析和使用
  4. 聊聊并发(四)深入分析ConcurrentHashMap
  5. 聊聊并发(五)原子操作的实现原理
  6. 聊聊并发(六)ConcurrentLinkedQueue的实现原理
  7. 聊聊并发(七)Java中的阻塞队列
  8. 聊聊并发(八)Fork/Join框架介绍
  9. 聊聊并发(九)Java中的CopyOnWrite容器
  10. 聊聊并发(十)生产者消费者模式

未完待续。。。

聊聊并发(四)深入分析ConcurrentHashMap

本文是作者原创,发表于InfoQ:http://www.infoq.com/cn/articles/ConcurrentHashMap

术语定义

术语 英文 解释
哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。 
哈希表 hash table 根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。

线程不安全的HashMap

因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。
阅读全文

聊聊并发(三)Java线程池的分析和使用

作者:方腾飞 原文发表于infoQ:http://www.infoq.com/cn/articles/java-threadPool

1.    引言

合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。

阅读全文

并发和并行有什么区别?

做并发编程之前,必须首先理解什么是并发,什么是并行,什么是并发编程,什么是并行编程。

并发(concurrency)和并行(parallellism)是:

  1. 解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
  2. 解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件
  3. 解释三:在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群

所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。

各位是如何理解并行和并发的呢?

聊聊并发(二)Java SE1.6中的Synchronized

本文属作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/java-se-16-synchronized

1 引言

在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。

阅读全文

聊聊并发(一)深入分析Volatile的实现原理

本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/ftf-java-volatile

引言

在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分析能帮助我们正确的使用Volatile变量。

阅读全文

return top