import java.util.ArrayList;
import java.util.List;
public class VolatileTest {
final long start
= System.
currentTimeMillis(); final int max = 5000;
final int maxThreads = 2;
for (int i = 0; i < max; i++) {
final List<Thread> threadList = new ArrayList<>();
for (int j = 0; j < maxThreads; j++) {
@Override
public void run() {
do_something();
}
}));
}
for (final Thread thread
: threadList
) thread.start();
for (final Thread thread
: threadList
) thread.join();
}
final long end
= System.
currentTimeMillis(); System.
out.
println((end
- start
) + " ms"); // for 2 threads:
// 16407 ms (w/o volatile counter)
// 176203 ms
// 1 thread
// 10687 ms (w/o volatile counter)
// 154345 ms
// intel snb 3.3 ghz, 2x2 cores
}
static int value = 1; // add volatile for volatile run
static final int maxcount = 100_000_000;
public static int do_something() {
int sum = 0;
for (int i = 0; i < maxcount; i++) {
sum += value;
}
return sum;
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKCnB1YmxpYyBjbGFzcyBWb2xhdGlsZVRlc3QgewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oZmluYWwgU3RyaW5nW10gYXJncykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICBmaW5hbCBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgZmluYWwgaW50IG1heCA9IDUwMDA7CiAgICAgICAgZmluYWwgaW50IG1heFRocmVhZHMgPSAyOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKICAgICAgICAgICAgZmluYWwgTGlzdDxUaHJlYWQ+IHRocmVhZExpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtYXhUaHJlYWRzOyBqKyspIHsKICAgICAgICAgICAgICAgIHRocmVhZExpc3QuYWRkKG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZG9fc29tZXRoaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoZmluYWwgVGhyZWFkIHRocmVhZCA6IHRocmVhZExpc3QpCiAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKTsKICAgICAgICAgICAgZm9yIChmaW5hbCBUaHJlYWQgdGhyZWFkIDogdGhyZWFkTGlzdCkKICAgICAgICAgICAgICAgIHRocmVhZC5qb2luKCk7CiAgICAgICAgfQogICAgICAgIGZpbmFsIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKChlbmQgLSBzdGFydCkgKyAiIG1zIik7CiAgICAgICAgLy8gZm9yIDIgdGhyZWFkczoKICAgICAgICAvLyAgIDE2NDA3IG1zICh3L28gdm9sYXRpbGUgY291bnRlcikKICAgICAgICAvLyAgMTc2MjAzIG1zCiAgICAgICAgLy8gICAgIDEgdGhyZWFkCiAgICAgICAgLy8gICAxMDY4NyBtcyAody9vIHZvbGF0aWxlIGNvdW50ZXIpCiAgICAgICAgLy8gIDE1NDM0NSBtcwogICAgICAgIC8vIGludGVsIHNuYiAzLjMgZ2h6LCAyeDIgY29yZXMKICAgIH0KCiAgICBzdGF0aWMgaW50IHZhbHVlID0gMTsgLy8gYWRkIHZvbGF0aWxlIGZvciB2b2xhdGlsZSBydW4KICAgIHN0YXRpYyBmaW5hbCBpbnQgbWF4Y291bnQgPSAxMDBfMDAwXzAwMDsKCiAgICBwdWJsaWMgc3RhdGljIGludCBkb19zb21ldGhpbmcoKSB7CiAgICAgICAgaW50IHN1bSA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhjb3VudDsgaSsrKSB7CiAgICAgICAgICAgIHN1bSArPSB2YWx1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN1bTsKICAgIH0KfQ==