比较有意思的一段代码,可以先运行看效果再将注释取消后看运行效果,上代码
- /**
- *
- * 每个对象实例化的时候,都要路过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();
- }
- }