package thread;
import java.util.ArrayList;
public class add
extends Thread {
private static ArrayList<Double> tmp = new ArrayList<Double>();
private static int Thread_Num = 4;
private static int count = -1;
private static double allsum = 0;
private static double limit = 10000000;
public void run() { // override Thread's run()
int threadid;
synchronized(lock) {
threadid = ++count;
}
double sum = 0;
for(int i=threadid;i<limit;i=i+Thread_Num) {
sum += tmp.get(i);
}
synchronized(lock) {
allsum += sum;
}
System.
out.
println("Thread" + threadid
+ " finish!"); }
public static void main
(String[] argv
) {
double testsum = 0;
for(int i=0;i<limit;i++) {
tmp.add((double) 1);
testsum = testsum + 1;
}
double startTime
= System.
currentTimeMillis();
for(int i=0;i<Thread_Num;i++) {
t[i] = new add();
t[i].start();
}
try {
for(int i=0;i<Thread_Num;i++) {
t[i].join();
}
System.
out.
println("right ans");
System.
out.
println("thread ans");
double endTime
= System.
currentTimeMillis(); System.
out.
println("Time : " + (endTime
-startTime
));
}
}
cGFja2FnZSB0aHJlYWQ7CgppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKCnB1YmxpYyBjbGFzcyBhZGQgZXh0ZW5kcyBUaHJlYWQgewoJCglwdWJsaWMgc3RhdGljIE9iamVjdCBsb2NrID0gbmV3IE9iamVjdCgpOwoJcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0PERvdWJsZT4gdG1wID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CQoJcHJpdmF0ZSBzdGF0aWMgaW50IFRocmVhZF9OdW0gPSA0OwoJcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gLTE7CgkJCglwcml2YXRlIHN0YXRpYyBkb3VibGUgYWxsc3VtID0gMDsKCXByaXZhdGUgc3RhdGljIGRvdWJsZSBsaW1pdCA9IDEwMDAwMDAwOwoJCiAgICBwdWJsaWMgdm9pZCBydW4oKSB7IC8vIG92ZXJyaWRlIFRocmVhZCdzIHJ1bigpCiAgICAJCiAgICAJaW50IHRocmVhZGlkOwogICAgCXN5bmNocm9uaXplZChsb2NrKSB7CiAgICAJCXRocmVhZGlkID0gKytjb3VudDsKICAgIAl9CiAgICAJZG91YmxlIHN1bSA9IDA7CiAgICAJCiAgICAJZm9yKGludCBpPXRocmVhZGlkO2k8bGltaXQ7aT1pK1RocmVhZF9OdW0pIHsKICAgIAkJc3VtICs9IHRtcC5nZXQoaSk7CiAgICAJfQogICAgCQogICAgCXN5bmNocm9uaXplZChsb2NrKSB7ICAgIAkKICAgIAkJYWxsc3VtICs9IHN1bTsKICAgIAl9CiAgICAJCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQiICsgdGhyZWFkaWQgKyAiIGZpbmlzaCEiKTsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgewogICAgCSAgCQogICAgCWRvdWJsZSB0ZXN0c3VtID0gMDsKCQlmb3IoaW50IGk9MDtpPGxpbWl0O2krKykgewoJCQl0bXAuYWRkKChkb3VibGUpIDEpOwoJCQl0ZXN0c3VtID0gdGVzdHN1bSArIDE7CQkJCgkJfQogICAgCWRvdWJsZSBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsgICAKICAgIAkKCQlUaHJlYWQgdFtdID0gbmV3IFRocmVhZCBbVGhyZWFkX051bV07CiAgICAJZm9yKGludCBpPTA7aTxUaHJlYWRfTnVtO2krKykgewogICAgCQl0W2ldID0gbmV3IGFkZCgpOwogICAgCQl0W2ldLnN0YXJ0KCk7CiAgICAJfSAgIAogICAgCQogICAgCQogICAgCXRyeSB7CiAgICAJCWZvcihpbnQgaT0wO2k8VGhyZWFkX051bTtpKyspIHsKICAgICAgICAJCXRbaV0uam9pbigpOwogICAgICAgIAl9CiAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkge30KICAgIAkKICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oInJpZ2h0IGFucyIpOwogICAgCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0c3VtKTsKICAgIAkKICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oInRocmVhZCBhbnMiKTsKICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oYWxsc3VtKTsKICAgIAkKICAgIAlkb3VibGUgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOyAKICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWUgOiAiICsgKGVuZFRpbWUtc3RhcnRUaW1lKSk7CiAgICAJCiAgICAJCiAgICAgICAgCiAgICB9CgogICAgCn0K