黑马程序员技术交流社区

标题: 学习笔记-特殊成员变量 [打印本页]

作者: 吴清源    时间: 2013-10-5 22:53
标题: 学习笔记-特殊成员变量
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 同步块效果一样,但大大减少系统开销







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2