67,513
社区成员
发帖
与我相关
我的任务
分享
public class VolatileTest {
volatile boolean b = false;
int a = 0;
public static void main(String[] args) {
for (int i=0; i<10000000; i++) {
VolatileTest resource = new VolatileTest();
Thread t1 = new Thread(new A(resource));
Thread t2 = new Thread(new B(resource));
t1.start();
t2.start();
}
}
}
class A implements Runnable {
volatile VolatileTest r = null;
public A(VolatileTest a) {
r = a;
}
public void run() {
r.a = 1;
r.b = true;
}
}
class B implements Runnable {
volatile VolatileTest r = null;
public B(VolatileTest a) {
r = a;
}
public void run() {
while (!r.b) {
Thread.yield();
}
int temp = r.a;
if (temp == 0) {
System.out.println("出现CPU指令重排序");
}
}
}
public class VolatileTest5 {
VolatileTest5_Resource resource = new VolatileTest5_Resource();
public static void main(String[] args) {
for (int i=0; i<10000000; i++) {
VolatileTest5 v = new VolatileTest5();
Thread t1 = new Thread(new VolatileTest5_A(v));
Thread t2 = new Thread(new VolatileTest5_B(v));
t1.start();
t2.start();
}
}
}
class VolatileTest5_Resource {
boolean b = false;
int a = 0;
}
class VolatileTest5_A implements Runnable {
volatile VolatileTest5 r = null;
public VolatileTest5_A(VolatileTest5 a) {
r = a;
}
public void run() {
r.resource.a = 1;
r.resource.b = true;
}
}
class VolatileTest5_B implements Runnable {
volatile VolatileTest5 r = null;
public VolatileTest5_B(VolatileTest5 a) {
r = a;
}
public void run() {
while (!r.resource.b) {
Thread.yield();
}
int temp = r.resource.a;
if (temp == 0) {
System.out.println("出现CPU指令重排");
}
}
}