学习java线程的相关知识

weixin_44788441 2019-03-17 01:12:00
在学习java线程的相关知识的时候,输入下面的这段程序,发现,第一个线程没有在cache里面取数据,而是取了第二个线程写到主存当中的数据了 ?
为什么呢? 我这里就是想要试验volatile关键字的.



private static int INIT_VALUE = 0;
private final static int MAX_LIMIT = 50;
public static void main(String[] args) {
new Thread(){

public void run(){
int localValue = INIT_VALUE;
while (localValue < MAX_LIMIT) {
if (localValue != INIT_VALUE) {
System.out.println("The value updated to" + INIT_VALUE);
localValue = INIT_VALUE;
}
}

}
}.start();

new Thread(){
public void run (){
int localValue = INIT_VALUE;
while (INIT_VALUE < MAX_LIMIT) {
++localValue;
System.out.println("Update the value to " + localValue);
INIT_VALUE = localValue;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}

输出结果如下:
Update the value to 1
The value updated to1
Update the value to 2
The value updated to2
Update the value to 3
The value updated to3
Update the value to 4
The value updated to4
Update the value to 5
The value updated to5
Update the value to 6
The value updated to6
...全文
336 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
千里送人头 2019-03-28
  • 打赏
  • 举报
回复
变量是定义在栈里面的,多个线程同时去操作同一个内存地址上的变量了.
qq_39936465 2019-03-23
  • 打赏
  • 举报
回复
你使用了volatile关键字,该数据被同步了,相当于线程共用数据,当线程一后于线程二执行时就会取得线程二处理过的数据。
LighBlade 2019-03-22
  • 打赏
  • 举报
回复
成员变量只有一份,当然会变了。。 是共享的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧