volatile 线程之间数据的同步
时间: 2020-06-15来源:博客园
前景提要
volatile 线程之间数据的同步
0 [待解决问题] 我用的是jdk1.8
程序的目的:
让一个新的线程去改变Numberss 实例的ss变量值,然后看main线程是否能得到新线程改变实例变量后的通知,从而看main线程中的Numberss 实例中的ss的值是否会被改变 class Numberss { int ss = 1000; public void changess() { this.ss = 500; } } public class T { public static void main(String[] args) { Numberss numberss = new Numberss(); new Thread(()->{ try { Thread.sleep(3000); numberss.changess(); System.out.println(Thread.currentThread().getName() +" 已经改变 : " + numberss.ss); } catch (InterruptedException e) { e.printStackTrace(); } },"aa").start(); while (numberss.ss ==1000){ System.out.println(Thread.currentThread().getName() + " 等待-"); } System.out.println(Thread.currentThread().getName()+" end"); System.out.println(Thread.currentThread().getName()+numberss.ss); } }
在线程aa中修改了Numberss 中的ss值且ss没有用volatile修饰,main线程竟然访问到了aa线程修改的ss的值。
突破了我对volatile的认知 volatile 线程间数据访问 Prince丶prayK | 菜鸟二级 | 园豆: 202
提问于:2020-06-15 10:27 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(2) 1 volatile提供了可见性,不代表不使用volatile就百分百不可见,只是不保证了而已 yytxdy | 园豆:1093 (小虾三级) | 2020-06-15 10:38 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 总归会同步到内存的,时间问题,反而觉得访问不到才是突破认知吧 56180825 | 园豆:1176 (小虾三级) | 2020-06-16 21:50 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行