Java中的volatile的作用和synchronized作用
volatile该关键字是主要使用的场合是字啊多个线程中可以感知实例的变量被更改了并且可以获取到最新的值进行使用,也就是用多线程读取共享变量的时候可以获取到最新的值使用。不能保障原子性
如果你在jvm中传递-server时候会导致这个运行的栈会在私有内存中而不是在共享内存中。
而synchronized是指的是同步的关键字,也就是说这个是线程同步的关键字。可以保障数据在并发的时候保证数据的原子性
测试代码:
MyThreadByVolatile
package cn.lonecloud;
/**
* 使用volatile关键字进行限制
* @Title: MyThreadByVolatile.java
* @Package cn.lonecloud
* @Description:
* @author lonecloud
* @date 2016年9月5日 下午4:08:00
*/
public class MyThreadByVolatile extends Thread{
//添加volatile关键字
volatile public static int m=0;
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
m++;
}
System.out.println(Thread.currentThread().getName()+" "+m);
}
}
MyThreadBySynchronized
package cn.lonecloud;
/**
* 使用synchronized同步方法进行
* @Title: MyThreadBySynchronized.java
* @Package cn.lonecloud
* @Description:
* @author lonecloud
* @date 2016年9月5日 下午4:08:56
*/
public class MyThreadBySynchronized extends Thread {
public static int m=0;
@Override
synchronized public void run() {
for (int i = 0; i < 100; i++) {
m++;
}
System.out.println(Thread.currentThread().getName()+" "+m);
}
}
VolatileTest
package cn.lonecloud;
/**
* 测试类
* @Title: VolatileTest.java
* @Package cn.lonecloud
* @Description:
* @author lonecloud
* @date 2016年9月5日 下午4:09:15
*/
public class VolatileTest {
public static void main(String[] args) {
Thread thread[]=new Thread[100];
for (int i = 0; i < 100; i++) {
thread[i]=new MyThreadByVolatile();//结果为99591总是少
// thread[i]=new MyThreadBySynchronized();
}
for (int i = 0; i < thread.length; i++) {
thread[i].start();
}
}
}
结果如果使用volatile没有保证数据的稳定
使用synchronized则有
Java中的volatile的作用和synchronized作用的更多相关文章
- java中的volatile关键字
java中的volatile关键字 一个变量被声明为volatile类型,表示这个变量可能随时被其他线程改变,所以不能把它cache到线程内存(如寄存器)中. 一般情况下volatile不能代替syn ...
- 深入理解Java中的volatile关键字
在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized ...
- java中的Volatile关键字使用
文章目录 什么时候使用volatile Happens-Before java中的Volatile关键字使用 在本文中,我们会介绍java中的一个关键字volatile. volatile的中文意思是 ...
- Java中的volatile关键字的功能
Java中的volatile关键字的功能 volatile是java中的一个类型修饰符.它是被设计用来修饰被不同线程访问和修改的变量.如果不加入volatile,基本上会导致这样的结果:要么无法编写多 ...
- 一定要你明白Java中的volatile
今天Tony来和大家聊聊Java中关键字volatile. 字节码 首先volatile int a = 3;和int a = 3;, 加不加volatile关键字,最终生成的字节码都一样的.有兴趣的 ...
- java中关键字volatile的作用
用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来 ...
- java中的volatile和synchronized
关于volatile和同步相关的东西,网上有太多错误和解释不清的东西, 所以查阅相关书籍和文章后总结如下, 如果还是也存在不正确的内容,请一定要指出来, 以免误人子弟:) 1. 原子性与可视性 原子性 ...
- java多线程关键字volatile、lock、synchronized
--------------------- 本文来自 旭日Follow_24 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xuri24/article/detail ...
- Java中的volatile关键字为什么不是不具有原子性
Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volat ...
- [读书笔记]java中的volatile关键词
以下内容大多来自周志明的<深入理解Java虚拟机>. 当一个变量被volatile修饰后,它将具备两种特性: 1. 保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变 ...
随机推荐
- iOS 的ipa 包重新签名
https://www.evernote.com/l/As7sxCnA85JCs7bn5Tg5St003gXYYslAk3k
- Linux日志轮循实现(shell)
在Linux系统中,日志的使用非常频繁,那么对日志就需要一定策略的管理,包括存放目录的设计,log文件命名规则,历史log文件的存放,log目录的容量限制,另外还有日志轮循. 日志轮循就是,将过期的l ...
- scss 初学笔记 三 继承
//继承 .btn{ padding: 4px 10px; font-size: 14px; } .primary{ background:red; @extend .btn; } //%placeh ...
- linkin大话数据结构--apache commons工具类
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...
- php curl模拟登陆抓取数据
http://www.cnblogs.com/zengguowang/p/6814474.html
- MathUtils
package com.yqw.java.util;/** * 数字转换工具 */public class MathUtils { /** * short转byte */ ...
- 解决C#编译中"csc不是内部或外部命令"的问题
安装完 VisualStudio 编译环境后,是不能用命令行直接编译写好的csc文件的,如果不配置环境变量,在命令提示符(cmd)中编译扩展名为cs的文件,会出现错误提示"csc不是内部或外 ...
- 使用clipboard.js实现复制内容至剪贴板
下载插件 clipboard.js是不依赖flash,实现复制内容至剪贴板的js插件.下载clipboard.js的压缩包,根据需要选择dist目录下的压缩或未压缩版. github地址:https: ...
- 05_Linux网络配置及CRT远程
占位占位占位占位占位占位占位占位
- Sonar 常用代码规则整理(一)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...