A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴清源 中级黑马   /  2013-10-5 22:53  /  1079 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

volatile关键字修饰的成员变量,可以告诉虚拟机该成员变量在运行时可能被多个线程多次修改,可是虚拟机每次执行修改调用操作时先进行确认,避免了同步需求,减少系统开销,例子如下:
  1. public class VolatileDemo implements Runnable {
  2.    
  3.     private volatile int number = 0;// 创建一个int类型变量进行测试
  4.    
  5.     @Override
  6.     public void run() {
  7.         for (int i = 0; i < 5; i++) {
  8.             try {
  9.                 Thread.sleep(100);// 线程休眠0.1秒增加出错几率
  10.             } catch (InterruptedException e) {
  11.                 e.printStackTrace();
  12.             }
  13.             // 输出当前线程的名称和number的值,每次循环之后number的值都会加一
  14.             System.out.println(Thread.currentThread().getName() + ": "
  15.                     + number++);
  16.         }
  17.     }
  18.    
  19.     public static void main(String[] args) {
  20.         VolatileDemo run = new VolatileDemo();// 获得SynchronizedMethodDemo对象
  21.         Thread thread1 = new Thread(run);// 创建线程1
  22.         Thread thread2 = new Thread(run);// 创建线程2
  23.         thread1.start();// 运行线程1
  24.         thread2.start();// 运行线程2
  25.     }
  26. }
复制代码
运行结果:
Thread-0: 0
Thread-1: 1
Thread-0: 2
Thread-1: 3
Thread-0: 4
Thread-1: 5
Thread-0: 6
Thread-1: 7
Thread-0: 8
Thread-1: 9
和加了 synchronized 同步块效果一样,但大大减少系统开销


评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马