首页 > 代码库 > Java中的volatile的作用和synchronized作用
Java中的volatile的作用和synchronized作用
volatile该关键字是主要使用的场合是字啊多个线程中可以感知实例的变量被更改了并且可以获取到最新的值进行使用,也就是用多线程读取共享变量的时候可以获取到最新的值使用。不能保障原子性
如果你在jvm中传递-server时候会导致这个运行的栈会在私有内存中而不是在共享内存中。
而synchronized是指的是同步的关键字,也就是说这个是线程同步的关键字。可以保障数据在并发的时候保证数据的原子性
测试代码:
MyThreadByVolatile
1 package cn.lonecloud; 2 /** 3 * 使用volatile关键字进行限制 4 * @Title: MyThreadByVolatile.java 5 * @Package cn.lonecloud 6 * @Description: 7 * @author lonecloud 8 * @date 2016年9月5日 下午4:08:00 9 */10 public class MyThreadByVolatile extends Thread{11 //添加volatile关键字12 volatile public static int m=0;13 @Override14 public void run() {15 for (int i = 0; i < 1000; i++) {16 m++;17 }18 System.out.println(Thread.currentThread().getName()+" "+m);19 }20 }
MyThreadBySynchronized
1 package cn.lonecloud; 2 /** 3 * 使用synchronized同步方法进行 4 * @Title: MyThreadBySynchronized.java 5 * @Package cn.lonecloud 6 * @Description: 7 * @author lonecloud 8 * @date 2016年9月5日 下午4:08:56 9 */10 public class MyThreadBySynchronized extends Thread {11 public static int m=0;12 @Override13 synchronized public void run() {14 for (int i = 0; i < 100; i++) {15 m++;16 }17 System.out.println(Thread.currentThread().getName()+" "+m);18 }19 }
VolatileTest
1 package cn.lonecloud; 2 /** 3 * 测试类 4 * @Title: VolatileTest.java 5 * @Package cn.lonecloud 6 * @Description: 7 * @author lonecloud 8 * @date 2016年9月5日 下午4:09:15 9 */10 public class VolatileTest {11 public static void main(String[] args) {12 Thread thread[]=new Thread[100];13 for (int i = 0; i < 100; i++) {14 thread[i]=new MyThreadByVolatile();//结果为99591总是少15 // thread[i]=new MyThreadBySynchronized();16 }17 for (int i = 0; i < thread.length; i++) {18 thread[i].start();19 }20 }21 }
结果如果使用volatile没有保证数据的稳定
使用synchronized则有
Java中的volatile的作用和synchronized作用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。