当前位置:新励学网 > 秒知问答 > java里volatile关键字有什么特性是否能保证线程安全

java里volatile关键字有什么特性是否能保证线程安全

发表时间:2024-07-27 23:29:05 来源:网友投稿

1.volatile不能保证原子性。简单说java有所谓主内存区和线程栈,同一变量在主内存区和各个线程的栈都存在副本(一对多)。volatile提供的可见性,是说每个线程访问用volatile修饰的变量时,volatile都保证线程能从主存区加载到当前最新的值(反之,线程修改后同步到主存的值也要保证对其他线程的可见);

2.java的volatile的语义其实不涉及cpu缓存。jvm本身是软件抽象,已经在操作系统之上;

3.因为非原子性,volatile往往不能保证线程安全。如果只有简单读写操作如seti=2,geti,可认为安全。i++就不行,它有一次读一次写;4volatile被认为是比锁要轻,编程要简单。可以用volatile的地方:对一个变量,更新其值的时候不依赖于当前值,且该变量不会和其他一起构成一个不可变条件。

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!