比较有意思的一段代码,可以先运行看效果再将注释取消后看运行效果,上代码
/**
*
* 每个对象实例化的时候,都要路过static方法
* 但是编译器会保证static快的执行是原子的,即便是多线程过来也要一个个执行
* 只不过,只有第一个实例动作的时候static快内的代码被执行
* 其他实例只是“路过”
* 即,每个实例都要走到static块,但是static块只会执行一次,
* 是通过调用该类的 client方法导致的,该方法只在类被加载的时候JVM调用
* @author liuinsect
*
*/
public class StaticBlockTest implements Runnable{
static{
if(true){
System.out.println("test");
// while(true){
//
// }
}
}
@Override
public void run() {
System.out.println("run");
}
/**
* @author liuinsect
* @date 2013-2-7
* @param args
*/
public static void main(String[] args) {
StaticBlockTest s = new StaticBlockTest();
StaticBlockTest s1 = new StaticBlockTest();
// StaticBlockTest s2 = new StaticBlockTest();
// StaticBlockTest s3 = new StaticBlockTest();
// StaticBlockTest s4 = new StaticBlockTest();
// StaticBlockTest s5 = new StaticBlockTest();
Thread t1 = new Thread(s);
Thread t2 = new Thread(s1);
t1.start();
t2.start();
}
}