volatile关键字增加了实例变量在多个线程之间的可见性,但是不具备原子性。
package com.wkcto.volatilekw;
/**
* volatile不是具备原子性
* Author: 老崔
*/
public class Test03 {
public static void main(String[] args) {
//在main线程中创建10个子线程
for (int i = 0; i < 100; i++) {
new MyThread().start();
}
}
static class MyThread extends Thread{
//volatile关键仅仅是表示所有线程从主内存读取count变量的值
public static int count;
/* //这段代码运行后不是线程安全的,想要线程安全,需要使用synchronized进行同步,如果使用synchronized同时,也就不需要volatile关键了
public static void addCount(){
for (int i = 0; i < 1000; i++) {
//count++不是原子操作
count++;
}
System.out.println(Thread.currentThread().getName() + " count=" + count);
}*/
public synchronized static void addCount(){
for (int i = 0; i < 1000; i++) {
//count++不是原子操作
count++;
}
System.out.println(Thread.currentThread().getName() + " count=" + count);
}
@Override
public void run() {
addCount();
}
}
}