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. 保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变 ...
随机推荐
- 自学python Day01
What is Python 1. 面向对象的解释行语言 2. 非常丰富的库 3. 使用制表符作为语句缩进 (white space) 优点: 1. 免费.开源 2. 可扩展性.可嵌入性 3. 非常丰 ...
- python 导入模块错误
问题: 导入一些模块或者运行第三方软件的时候,会出现一下类似错误: ImportError: No module named future.utils 问题原因: 没有安装第三方库 future,这个 ...
- MS SQL 事物日志传送能否跨数据库版本吗?
SQL SERVER的事物日志传送(log shipping)功能,相信很多人都使用过或正在应用,这是MS SQL提供的一个非常强大的功能,一般需要一个主数据库服务器(primary/producti ...
- Android studio修改包名
最后一步,需要手动修改工程 build.gradle文件中的applicationId改为跟你的包名一致即可,
- linux判断文件是否存在
#!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/access.log" # 这里的-x 参 ...
- 【转】iptables 命令介绍
iptables 防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置iptables将会帮助你更有 效地管理Linux防火墙.如果你是第 ...
- samephore()信号量跨线程通信
samephore1: #include <stdio.h> #include <stdlib.h> #include <Windows.h> ] = " ...
- 前端-高潮 jQuery
jQuery:就是让页面动起来 参考手册:http://jquery.cuishifeng.cn/ DOM/BOM/javaScript 继承的类库 <--->模块 一.查找元素 二.操作 ...
- iOS-iOS调用相机调用相册【将图片保存到本地相册】
设置头部代理 <UINavigationControllerDelegate, UIImagePickerControllerDelegate> 1.调用相机 检测前置摄像头是否可用 - ...
- 12、SEO工程师指南 - 软件项目角色指南系列文章
第11章 SEO工程师 SEO工程师是一个比较新兴的职位,在实际的项目管理过程中,SEO工程师的地位相对靠后,只有在项目试运行以及运营期间才能体现出SEO工程师的作用.在项目完成之后, ...