码迷,mamicode.com
首页 > 其他好文 > 详细

内存模型和并发的笔记

时间:2015-08-17 21:25:15      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

并发概率下的内存模型

  java定义了一个内存模型,从硬件/操作系统中抽象出来。对比C/C++直接用操作系统的内存是不同的。

技术分享

技术分享

  工作内存(working memory):线程自己独占的内存。线程的工作内存是主内存的一份拷贝。
  主内存(main memory):实际上存放所有线程的数据的地方。
 

工作内存和主内存如何交互

这些都是原子性操作的
  • lock
  • unlock
  • read
  • load
  • use
  • assign
  • store
  • write
volatile:直接访问主内存。
一般用于修饰单例,初始化变量。
不能保护变量做运算时候的线程安全。(运算的话使用current包的atoms相关类)
long/double的非原子性协定
在32位系统中,对long、double进行读写操作, 是分为2个动作的。不过具体JVM会把这个动作原子性实现了。。。

 

JVM并发特性

  • 原子性
不可切割。lock、unlock。。。等操作;synchronized块。
  • 可见性
一个线程修改了共享变量后,另外一个线程立即看得到。volatile/final/synchronized。
  • 有序性
本线程类观察,所有操作有序;其他线程观察就是无序。(线程内表现为有序)
 

java线程如何实现

源码中看到, java中的线程都是native本地方法,平台相关性重的。
可能手段:1、使用内核线程;2、使用用户线程;3、使用混合实现(内核线程+用户线程。也就是N:M关系)

 

线程状态

线程状态:

  • new,
  • runnable,
  • timed waiting,
  • waiting,
  • blocked,
  • terminated.

技术分享

内存模型和并发的笔记

标签:

原文地址:http://www.cnblogs.com/ELMND/p/4737580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!