首页 > 应用开发 > Java > Java并发指南6:Java内存模型JMM总结
//x、y为非volatile变量 //flag为volatile变量 x = 2; //语句1 y = 0; //语句2 flag = true; //语句3 x = 4; //语句4 y = -1; //语句5
class VolatileBarrierExample { int a; volatile int v1 = 1; volatile int v2 = 2; void readAndWrite() { int i = v1; //第一个volatile读 int j = v2; // 第二个volatile读 a = i + j; //普通写 v1 = i + 1; // 第一个volatile写 v2 = j * 2; //第二个 volatile写 } … //其他方法 }
/ * * 发起20个线程,每个线程对race变量进行10000次自增操作,如果代码能够正确并发, * 则最终race的结果应为200000,但实际的运行结果却小于200000。 * * @author Colin Wang */ public class Test { public static volatile int race = 0; public static void increase() { race++; } private static final int THREADS_COUNT = 20; public static void main(String[] args) { Thread[] threads = new Thread[THREADS_COUNT]; for (int i = 0; i < THREADS_COUNT; i++) { threads[i] = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 10000; i++) { increase(); } } }); threads[i].start(); } while (Thread.activeCount() > 1) Thread.yield(); System.out.println(race); } }
public class FinalTest { int i;//普通变量 final int j; static FinalExample obj; public FinalExample(){ i = 1; j = 2; } public static void writer(){ obj = new FinalExample(); } public static void reader(){ FinalExample object = obj;//读对象引用 int a = object.i; int b = object.j; } }
public class FinalReferenceTest { final int[] arrs;//final引用 static FinalReferenceTest obj; public FinalReferenceTest(){ arrs = new int[1];//1 arrs[0] = 1;//2 } public static void write0(){//A线程 obj = new FinalReferenceTest();//3 } public static void write1(){//线程B obj.arrs[0] = 2;//4 } public static void reader(){//C线程 if(obj!=null){//5 int temp =obj.arrs[0];//6 } } }
public class FinalReferenceEscapeExample {final int i;static FinalReferenceEscapeExample obj;public FinalReferenceEscapeExample () { i = 1; // 1写final域 obj = this; // 2 this引用在此"逸出" } public static void writer() {new FinalReferenceEscapeExample (); }public static void reader() {if (obj != null) { // 3 int temp = obj.i; // 4 } } }
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69951287/viewspace-2663307/ ,如需转载,请注明出处,否则将追究法律责任。
注册时间:2019-10-19