关闭

关于volatile修饰符的一知半解

112人阅读 评论(0) 收藏 举报
分类:

最近做项目的时候,有这么一个需求,让cpu跑到90%使用率
我的思路是,开启多个线程,让每个线程执行无限循环计算。这个方法证明是可行的,但是有个问题是,如何控制cpu的使用率,换言之,如何在需要时降低cpu负载。
我想到的是用boolean型变量控制它(比较粗暴。。),用这个变量控制是否执行无限循环计算。
然后就遇到bug了:在需要停止的时候,线程基本上都停不下来。后期通过同事的帮助,找到问题所在,我的boolean型变量是在主线程中定义的,然后直接在子线程中去使用它,造成了在主线程中改变变量值时,子线程中没有更新及时。
这与java的线程机制有关系,在java中,每个线程都有自己的内存,主线程有main memory,子线程有自己的memory,为了提高效率,一个线程会在自己的memory中保持访问变量的副本。这样就会导致有可能在某一时刻,两个线程访问同一变量,实际上却得到不同结果的值。
加入volatile,意思就是这个变量的值会变,就是不能cache到子memory中

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

volatile修饰符的作用

作用 volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 简单地说就是防止编译器对代码进行优化.比如如下程序: XBYTE[2]...
  • coolibin
  • coolibin
  • 2013-03-21 20:38
  • 1269

volatile变量修饰符—意料之外的问题(含代码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17101369     volatile用处说明     在JDK1.2之前,J...
  • HUXU981598436
  • HUXU981598436
  • 2015-02-02 14:16
  • 541

修饰符volatile

最近学习java多线程,碰巧项目中用到AtomicReference类,在网上搜罗了一堆资料,记录一下阅读笔记和一些文章网址供以后复习。这些文章都和volatile有关,通过学习volatile可以知...
  • u011730649
  • u011730649
  • 2015-04-15 16:37
  • 350

volatile修饰符

volatile它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。 volatile的作用: 作为...
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2014-04-07 21:58
  • 566

volatile修饰符

一、关键字volatile含义 这个问题是区分c程序员和嵌入式系统程序员的最基本问题,搞嵌入式经常同硬件、中断、RTOS等打交道,所有这些都要求用到volatile变量。volatile含义就是:一个...
  • jpbj_zb
  • jpbj_zb
  • 2016-05-04 08:19
  • 143

修饰符之volatile

作用: 避免被编译器优化 说起优化,一般有两个层级.一个是程序员对代码的优化,影响源代码的输出.另一个是编译器对代码的优化,影响可执行文件的输出. 下面说一下编译器对代码的优化对代码块的优化 不修饰...
  • u011011827
  • u011011827
  • 2016-10-20 11:19
  • 257

修饰 C++ 成员函数的两种关键字总结

修饰 C++ 成员函数的两种关键字总结常量成员函数 (const 关键字)const 修饰成员函数表示这个成员函数不能修改类的成员变量,因此这种成员函数称为常量成员函数。这样,编译器可以对这个函数进行...
  • liyuanbhu
  • liyuanbhu
  • 2015-12-20 16:09
  • 1902

java中volatile修饰符语义

当一个变量定义为volatile之后,它将具备两种特性。 第一是保证此变量对所有线程的可见性。这里的“可见性”是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。而普通变量不能做...
  • zjt1388
  • zjt1388
  • 2014-09-18 20:07
  • 275

c#中多线程修饰符volatile

volatile是C#中用于控制同步的关键字,其意义是针对程序中一些敏感数据,不允许多线程同时访问,保证数据在任何访问时刻,最多有一个线程访问,以保证数据的完整性,volatile是修饰变量的修饰符。...
  • lonestar555
  • lonestar555
  • 2015-10-10 16:05
  • 2129

C语言volatile修饰符

qqq
  • kdb_viewer
  • kdb_viewer
  • 2016-12-08 16:21
  • 73
    个人资料
    • 访问:363次
    • 积分:39
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档