java指令重排序代码演示

Jdk版本:jdk1.8.0_151

代码

1public class SimpleHappenBefore { 2 3 public static void main(String[] args) throws InterruptedException { 4 5 for(int i=0;i<500000;i++){ 6 SimpleHappenBefore.State state = new SimpleHappenBefore.State(); 7 ThreadA threadA=new ThreadA(state); 8 ThreadB threadB=new ThreadB(state); 9 threadA.start(); 10 threadB.start(); 11 12 threadA.join(); 13 threadB.join(); 14 } 15 } 16 17 static class ThreadA extends Thread{ 18 19 private final SimpleHappenBefore.State state; 20 21 ThreadA(SimpleHappenBefore.State state) { 22 this.state = state; 23 } 24 25 public void run(){ 26 state.a=1; 27 state.b=1; 28 state.c=1; 29 state.d=1; 30 } 31 } 32 33 static class ThreadB extends Thread{ 34 35 private final SimpleHappenBefore.State state; 36 37 ThreadB(SimpleHappenBefore.State state) { 38 this.state = state; 39 } 40 41 public void run(){ 42 if(state.b==1 && state.a==0){ 43 System.out.println("b=1"); 44 } 45 46 if(state.c==1 && (state.b==0 || state.a == 0)){ 47 System.out.println("c=1"); 48 } 49 50 if(state.d==1 && (state.a==0 || state.b==0 || state.c==0)){ 51 System.out.println("d==1"); 52 } 53 } 54 } 55 56 static class State { 57 public int a = 0; 58 public int b = 0; 59 public int c = 0; 60 public int d = 0; 61 } 62}

输出

1d==1 2d==1 3c=1
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java中使用redis

1.java代码publicclassRedisTest01{publicstaticvoidmain(Stringargs){//connectredisserverJedisredisnewJedis("127.0.0

java 线程方法join的简单总结

一、作用  Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。具体看代码:publicclassJoinTest{publicstaticvoidmain(Stringargs)throwsInterruptedException{

java实现九九乘法表的输出

这是小学二年级令人难忘的坷如今以java程序的行式展示,真不戳!publicclassscore{publicstaticvoidmain(Stringargs){inti,j;for(i1;i<9;i){for(j1;j<9;j

JVM调优YoungGC

先上代码:主函数:1.publicclassGCDemo{3.publicstaticvoidmain(String\\args)throwsInterruptedException{6.List<GCDataObjectlistnewArrayList<GCDat