package data.transforms; final public class RedundantWriteAfterReadElimination { static int x = 0; final static Object m1; final static Object m2; static { m1 = new Object(); m2 = new Object(); } final public static void thread1() { synchronized (m1) { x = 2; } } final public static void thread2() { synchronized (m2) { x = 1; } } final public static void thread3() { final int r1; final int r2; synchronized (m1) { synchronized (m2) { r1 = x; x = r1; r2 = x; } } assert r1 != r2; } final public static void thread3T() { final int r1; final int r2; synchronized (m1) { synchronized (m2) { r1 = x; r2 = x; } } assert r1 != r2; } public RedundantWriteAfterReadElimination() { super(); } }