码迷,mamicode.com
首页 > 编程语言 > 详细

java 线程之-volatile

时间:2014-11-22 23:02:21      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:style   color   使用   sp   java   strong   on   问题   as   

前言-发奋忘食,乐以忘优,不知老之将至.

介绍:在java中用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值[注意:不要被这个都字误导.稍后做详细解释].volatile很容易被[误用],用来进行[原子性]操作。

解释:在java的虚拟机运行的机制中,java的线程运行程序的时候,为了保证程序运行的效率问题,每个线程运行的时候,虚拟机会单独为这个线程分配一块临时内存区域,我们可以称之为[当前线程专用内存]

而线程会把自己运行过程中所需要的变量加载到[当前线程专用内存]之中,(举例线程A需要执行一个对变量a的++的操作,在线程加载的时候,会首先把变量a加入到自己的[当前线程专用内存]当中),当线程

执行完毕的时候,会再把当前的保存在[当前线程专用内存]的变量,更新到[原始内存]当中.

问题:如果有两个线程AB,同时对变量进行upate操作,那么在两个线程执行当中,可能会出现这样一种情况,两个线程进入程序,都在自己的[当前线程专用内存]当中保存了,变量的原始值.那么两个线程执行

完毕之后,最后一个执行的线程的update操作将覆盖第一个线程执行的update操作.----------------程序的不同步问题(银行取钱存钱问题.)


解决思路
    1.同时只让一个程序执行update操作----------效率低-------synchronized
    
    2.执行updtae操作的时候,让线程不要从[当前线程专用内存]中读取备份的变量,而是直接从内存中读取变量--------效率稍高-------volatile


java 线程之-volatile

标签:style   color   使用   sp   java   strong   on   问题   as   

原文地址:http://www.cnblogs.com/yatou520/p/4115837.html

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