Date().getTime()スレッド詰まりの問題
1399 ワード
new Date().gettime()はスレッド詰まりの問題が発生する確率は低いが,いったん発生すると性能も大幅に低下し,次のコードはこの問題をテストし,10個のスレッドを作成し,絶えず実行することができる.
この方法はgetJulianCalendar()を参照しているため、
synchronized private static final BaseCalendar getJulianCalendar() { if (jcal == null) { jcal = (BaseCalendar) CalendarSystem.forName("julian"); } return jcal; }
テストコード:
result:
....
11423--2 11424--274 11425--2 11426--3
....
一定回数運行しているとブロックされることがわかります
フル集約サイト
この方法はgetJulianCalendar()を参照しているため、
synchronized private static final BaseCalendar getJulianCalendar() { if (jcal == null) { jcal = (BaseCalendar) CalendarSystem.forName("julian"); } return jcal; }
テストコード:
public class DuMain {
public static void main(String[] args) {
long time = System.currentTimeMillis();
test();
long end = System.currentTimeMillis();
System.out.println(end - time);
//................
for(int i=0;i<10;i++){
new Thread(){
@Override
public void run() {
for(int i=0;i<1000000000;i++){
test();
// System.out.println(i);
}
}
}.start();
}
for(int i=0;i<1000000000;i++){
time = System.currentTimeMillis();
test();
end = System.currentTimeMillis();
System.out.println(""+i+"--"+(end - time));
// System.out.println(i);
}
}
public static boolean test() {
Date begin = new Date();
int ONE_SECOND = 2;
boolean result = false;
while (true) {
if (new Date().getTime() - begin.getTime() >= ONE_SECOND) {
result = true;
break;
}
}
return result;
}
}
result:
....
11423--2 11424--274 11425--2 11426--3
....
一定回数運行しているとブロックされることがわかります
フル集約サイト