Java内存模型简单总结
2016-05-09 23:09
302 查看
一、基础
问题:线程之间如何通信,以及线程之间如何同步。
通信:多个线程之间如何交换信息。
通信的方式:共享内存(隐式的)和消息传递(显式的)。
对应的并发编程模型有两种:共享内存的并发编程模型和消息传递的并发编程模型。
同步:用于控制不同线程之间操作发生相对顺序的机制。
也有显示同步和隐示同步。
共享内存的并发编程模型需要进行显示的同步。
消息传递的并发编程模型会隐示的进行同步。
Java并发编程模型使用的共享内存的并发编程模型。
二、JMM
问题: Java中的线程是如何进行消息传递的?
Java堆内存在线程之间是共享的、栈不是。
实例域、静态域、数组都存放到堆中。称之为共享变量。
JMM控制着一个线程对共享变量的写入对另一个线程何时可见。
下面具体描述线程中的本地内存和主内存中之间关系:
线程中的共享变量存放到主内存中。
每一个线程都有一个私有的本地内存,本地内存是一个抽象概念,具体包括:缓存、写缓冲区、寄存器、其他的硬件和编译器的优化。
![](http://img.blog.csdn.net/20160509230801852)
线程A和B通信的步骤:
1、线程A首先将本地可能已经改变的共享变量的副本刷新进入主内存。
2、然后线程B从主内存中读取该变量,然后更新自己变量的副本。
问题:线程之间如何通信,以及线程之间如何同步。
通信:多个线程之间如何交换信息。
通信的方式:共享内存(隐式的)和消息传递(显式的)。
对应的并发编程模型有两种:共享内存的并发编程模型和消息传递的并发编程模型。
同步:用于控制不同线程之间操作发生相对顺序的机制。
也有显示同步和隐示同步。
共享内存的并发编程模型需要进行显示的同步。
消息传递的并发编程模型会隐示的进行同步。
Java并发编程模型使用的共享内存的并发编程模型。
二、JMM
问题: Java中的线程是如何进行消息传递的?
Java堆内存在线程之间是共享的、栈不是。
实例域、静态域、数组都存放到堆中。称之为共享变量。
JMM控制着一个线程对共享变量的写入对另一个线程何时可见。
下面具体描述线程中的本地内存和主内存中之间关系:
线程中的共享变量存放到主内存中。
每一个线程都有一个私有的本地内存,本地内存是一个抽象概念,具体包括:缓存、写缓冲区、寄存器、其他的硬件和编译器的优化。
线程A和B通信的步骤:
1、线程A首先将本地可能已经改变的共享变量的副本刷新进入主内存。
2、然后线程B从主内存中读取该变量,然后更新自己变量的副本。
从今天开始跑,加速度的跑、不要回头、当速度足够块的时候,你将看到一些你从未看到过的风景。 --安藤忠雄
相关文章推荐
- java String类-获取一个字符串在另一个字符串中出现的次数
- java String类-字符串反转
- JAVA并发实现四(守护线程和线程阻塞)
- java 线程七-Lock锁
- Java基础知识汇总
- java 线程六-解决线程安全隐患问题-加锁
- log4j-1简单介绍与配置--eclipse
- java 线程五-死锁经典举例
- 基于注解的Spring mvc 简单了解
- java 线程四
- 用JAVA实现一个爬虫,爬取知乎的上的内容
- Spring IOC容器-注解的方式【更简化】
- java 线程三
- java 线程二
- Struts2标签取值方式一/二
- Spring之FactoryBean
- java学习笔记
- JAVA并发实现三(线程的挂起和恢复)
- 学生信息管理系统--(Java+MySQL实现)
- Hadoop 2.7 伪分布式安装配置 Error: JAVA_HOME is not set and could not be found.