1、不保证原子性
public class NoAtomic {
public static void main(String[] args) {
MyData1 myData1 = new MyData1();
for (int i = 0; i < 20; i++) {
new Thread(()->{
for (int j = 0; j < 1000; j++) {
myData1.add();
myData1.addAtomic();
}
},String.valueOf(i)).start();
}
while (Thread.activeCount() > 2){
Thread.yield();
}
System.out.println(Thread.currentThread().getName()+"int type,main thread number:"+myData1.number);
System.out.println(Thread.currentThread().getName()+"AtomicInteger type,main thread number:"+myData1.atomic);
}
}
class MyData1{
public int number = 0;
public void add(){
number++;
}
AtomicInteger atomic = new AtomicInteger();
public void addAtomic(){
atomic.getAndIncrement();
}
}
2、可见性
public class Visibility {
public static void main(String[] args) {
MyData myData = new MyData();
new Thread(() -> {
System.out.println(Thread.currentThread().getName()+"come in");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
myData.addTo60();
System.out.println(Thread.currentThread().getName()+"update value:" + myData.number);
},"AAA").start();
while(myData.number == 0){}
System.out.println(Thread.currentThread().getName()+"come in:" + myData.number);
}
}
class MyData{
volatile int number = 0;
public void addTo60(){
number = 60;
}
}