Skip to content

Instantly share code, notes, and snippets.

@fujohnwang
Created October 26, 2011 01:28
Show Gist options
  • Save fujohnwang/1315137 to your computer and use it in GitHub Desktop.
Save fujohnwang/1315137 to your computer and use it in GitHub Desktop.
memory barrier demo
/**
* 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