Count++不是线程安全的 不是原子性的

package com.bjsxt.base.sync007;

import java.util.concurrent.atomic.AtomicInteger;

import com.sun.org.apache.xalan.internal.xsltc.compiler.sym;

/**
 * volatile关键字不具备synchronized关键字的原子性(同步)
 * @author alienware
 *
 */
public class VolatileNoAtomic extends Thread{
	private static volatile int count;
//	private static AtomicInteger count = new AtomicInteger(0);
	private static void addCount(){
		for (int i = 0; i < 100000; i++) {
			count++ ;
//			count.incrementAndGet();
		}
		System.out.println(count);
	}
	
	public void run(){
		addCount();
	}
	
	public static void main(String[] args) {
		
		VolatileNoAtomic[] arr = new VolatileNoAtomic[100];
		for (int i = 0; i < 20; i++) {
			arr[i] = new VolatileNoAtomic();
		}
		
		for (int i = 0; i < 20; i++) {
			arr[i].start();
		}
	}
	
	
	
	
}

如果count++ 满足原子性的话 最后一个值肯定是正确的

现在说的是count++是否具有原子性 所以打印出来的值可能和你预想的不太一样 如果想一样的话 必须是整个方法是加锁才行


你可能感兴趣的:(多线程)