Created
October 26, 2011 01:28
-
-
Save fujohnwang/1315137 to your computer and use it in GitHub Desktop.
memory barrier demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Project File of Scala, Right Reserved by Darren Studio Works | |
* <p/> | |
* User: fujohnwang | |
* Date: 10/26/11 | |
*/ | |
public class SharedObject { | |
public int age; | |
public String name; | |
public boolean married; | |
public volatile long updateBarrier = 0; | |
@Override | |
public String toString() { | |
return new StringBuilder("sharedobject(age=").append(age).append(", name=").append(name).append(", married=").append(married).append(")").toString(); | |
} | |
} | |
/** | |
* Project File of Scala, Right Reserved by Darren Studio Works | |
* <p/> | |
* User: fujohnwang | |
* Date: 10/26/11 | |
*/ | |
public class MBRunner { | |
public static void main(String[] args) throws Exception { | |
final long mb1Value = 1; | |
final long mb2Value = 2; | |
final long mb3Value = 3; | |
final SharedObject so = new SharedObject(); | |
Thread thread1 = new Thread("writer1") { | |
@Override | |
public void run() { | |
so.age = 32; | |
so.updateBarrier = mb1Value; | |
} | |
}; | |
Thread thread2 = new Thread("writer2") { | |
@Override | |
public void run() { | |
so.name = "darren"; | |
so.updateBarrier = mb2Value; | |
} | |
}; | |
Thread thread3 = new Thread("writer3") { | |
@Override | |
public void run() { | |
so.married = true; | |
so.updateBarrier = mb3Value; | |
} | |
}; | |
Thread reader1 = new Thread("reader1") { | |
@Override | |
public void run() { | |
System.out.println("after thread1:" + so.toString()); | |
} | |
}; | |
Thread reader2 = new Thread("reader2") { | |
@Override | |
public void run() { | |
System.out.println("after thread2:" + so.toString()); | |
} | |
}; | |
Thread reader3 = new Thread("reader3") { | |
@Override | |
public void run() { | |
System.out.println("after thread3:" + so.toString()); | |
} | |
}; | |
// | |
thread1.start(); | |
thread1.join(); | |
reader1.start(); | |
reader1.join(); | |
// | |
thread2.start(); | |
thread2.join(); | |
reader2.start(); | |
reader2.join(); | |
// | |
thread3.start(); | |
thread3.join(); | |
reader3.start(); | |
reader3.join(); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment