JAvaクラスのstaticブロック
偶然の考え:staticブロックがマルチスレッド環境でも一度しか実行できないかどうかをテストする
package com.study.thread;
/**
* static
* @author CrazyPig
*
*/
public class ThreadSyn {
private static int count = 0;
static {
System.out.println("start static block");
try {
Thread.sleep(5000);
} catch(InterruptedException e) {
System.out.println(" ");
}
count ++;
System.out.println("end static block");
}
public static void print() {
System.out.println("count = " + count);
}
public void print0() {
System.out.println("print0()");
}
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// static
ThreadSyn.print();
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ThreadSyn newInstance = new ThreadSyn();
newInstance.print0();
}
});
t1.start();
t2.start();
}
}
テストの結果、クラスのstaticブロックはマルチスレッド環境でも一度しか実行できないことが証明され、JVMによって保証された.