|
|
@@ -1,68 +0,0 @@ |
|
|
|
/** |
|
|
|
* Created by qianjia on 15/1/25. |
|
|
|
*/ |
|
|
|
public class TestNonAtomicLongAssignment { |
|
|
|
|
|
|
|
private static final long HI = 1l << 32; |
|
|
|
private static final long LO = 1l; |
|
|
|
|
|
|
|
private static final long TEST_NUMBER = HI | LO; |
|
|
|
|
|
|
|
private static long assignee = 0l; |
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
|
|
|
|
Thread writer = new Thread(new Runnable() { |
|
|
|
@Override |
|
|
|
public void run() { |
|
|
|
while (true) { |
|
|
|
assignee = TEST_NUMBER; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
writer.setDaemon(true); |
|
|
|
|
|
|
|
Thread reader = new Thread(new Runnable() { |
|
|
|
@Override |
|
|
|
public void run() { |
|
|
|
long i = 0; |
|
|
|
while (true) { |
|
|
|
i++; |
|
|
|
long test = assignee; |
|
|
|
if (test != TEST_NUMBER) { |
|
|
|
System.out.print(i + " times:" + toBin(test)); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
// Thread worker = new Thread(new Runnable() { |
|
|
|
// @Override |
|
|
|
// public void run() { |
|
|
|
// double d = 89009808877238948224343435452333323113131313133434434341212323232424243434335354232390490189190420928348910913094983.323334401928d; |
|
|
|
// while(true) { |
|
|
|
// Math.cbrt(d); |
|
|
|
// d = d - 1l; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// }); |
|
|
|
// worker.setDaemon(true); |
|
|
|
// worker.start(); |
|
|
|
|
|
|
|
writer.start(); |
|
|
|
reader.start(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public static String toBin(long n) { |
|
|
|
StringBuilder sb = new StringBuilder(Long.toBinaryString(n)); |
|
|
|
int padding = 64 - sb.length(); |
|
|
|
while (padding > 0) { |
|
|
|
sb.insert(0, '0'); |
|
|
|
padding--; |
|
|
|
} |
|
|
|
return sb.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
} |