publicclassAtomicity{privatestaticint number =0;publicstaticvoidmain(String[] args)throws InterruptedException {
Runnable increment =()->{for(int i =0; i <1000; i++){
number++;}};
List<Thread> list =newArrayList<Thread>();// 5个线程,每个线程执行1000次number++for(int i=0; i <5; i++){
Thread t =newThread(increment);
t.start();
list.add(t);}//为了保证5个线程执行完毕,主线程再打印numberfor(Thread t : list){
t.join();}
System.out.println("number:"+ number);}}
a =1;// 操作1
b =2;// 操作2// 重排序后
b =2;// 操作2
a =1;// 操作1
出现可见性问题的两个前提:至少有两个线程、有个共享变量
publicclassOrdering{privateint num =0;privateboolean flag =false;privateint x;publicvoidaction1(){if(flag){
x = num + num;}else{
x =1;}// x的可能结果
System.out.println(x);}publicvoidaction2(){
num =2;
flag =true;}}