JAVA线程的工作内存
来源:互联网 发布:linux常见的服务器配置 编辑:程序博客网 时间:2024/06/05 22:39
首先,先传代码,有图片,也有文件,看不清的朋友可以直接下载文件回去跑一下,感受一下。
我解释一下吧,大概意思就是在一个线程里面不断的跑,如果a=0,就把a加到5,然后建立子线程,再在子线程里面把a减到0。预想的结果是这个循环会无限的执行打印语句,但是事实上,并没有。因为进不去 if 语句。也就是说,虽然子线程把a减到了0,主存中的a等于0,但是在main里面new出来的线程里面的a不等于0。
这是线程的工作内存问题,不知道工作内存的去百度吧,这里就不赘述了。我直接说解决方案吧:
①多线程中的变量,都要上锁,无论是读还是写。在线程进入synchronized块之前,会把工作存内存中的所有内容映射到主内存上,然后把工作内存清空再从主存储器上拷贝最新的值。而在线程退出synchronized块时,同样会把工作内存中的值映射到主内存(例子是因为if中的读操作没有用synchronized,导致数据不一致)
②读如果不上锁也行,但是a变量要声明为volatile。
③使用atomic包,简单粗暴。
0 1
- JAVA线程的工作内存
- 线程的工作内存
- java线程内存模型,线程、工作内存、主内存
- java线程内存模型,线程、工作内存、主内存
- java线程内存模型,线程、工作内存、主内存
- java线程内存模型,线程、工作内存、主内存
- java线程内存模型,线程、工作内存、主内存
- java线程内存模型,线程、工作内存、主内存
- java线程内存模型,线程、工作内存、主内存
- java线程内存模型,线程、工作内存、主内存
- 【Java】线程内存模型,线程、工作内存、主内存
- 【并发】java线程内存模型,线程、工作内存、主内存
- java线程内存模型,线程、工作内存、主内存
- Java 线程通信内存模型---主内存与工作内存
- [深受启发]java线程内存模型,线程、工作内存、主内存
- java的线程内存模型
- Java内存模型与线程02:主内存和工作内存
- Java 线程池是如何工作的
- android MultiViewAnimation 多个View,多个Animation按顺序执行的框架
- SVN服务端和客服端(如何清除SVN密码)
- [Android]打开eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。
- HDU 2089 不要62【打表】
- BadgeView+weixinUi
- JAVA线程的工作内存
- 暑假集训随笔
- HDU 1020 Encoding字符串编码
- c++11线程池实现
- myeclipse中记载mysql驱动器注意的问题
- 心电前端采集模块——AD8323功能与电路
- mybatis和ibatis原始实现DAO
- iOS6与iOS7适配
- Linux安装MySQL的两种方法 普通安装法 rpm安装