java static塊的執行次數

 比較有意思的一段代碼,能夠先運行看效果再將註釋取消後看運行效果,上代碼多線程

Java代碼 複製代碼 收藏代碼
  1. /**
  2. *
  3. * 每一個對象實例化的時候,都要路過static方法
  4. * 可是編譯器會保證static快的執行是原子的,即使是多線程過來也要一個個執行
  5. * 只不過,只有第一個實例動做的時候static快內的代碼被執行
  6. * 其餘實例只是「路過」
  7. * 即,每一個實例都要走到static塊,可是static塊只會執行一次,
  8. * 是經過調用該類的 client方法致使的,該方法只在類被加載的時候JVM調用
  9. * @author liuinsect
  10. *
  11. */
  12. public class StaticBlockTest implements Runnable{
  13.  
  14. static{
  15. if(true){
  16. System.out.println("test");
  17. // while(true){
  18. //
  19. // }
  20. }
  21.  
  22. }
  23.  
  24. @Override
  25. public void run() {
  26.  
  27. System.out.println("run");
  28. }
  29.  
  30. /**
  31. * @author liuinsect
  32. * @date 2013-2-7
  33. * @param args
  34. */
  35. public static void main(String[] args) {
  36. StaticBlockTest s = new StaticBlockTest();
  37. StaticBlockTest s1 = new StaticBlockTest();
  38. // StaticBlockTest s2 = new StaticBlockTest();
  39. // StaticBlockTest s3 = new StaticBlockTest();
  40. // StaticBlockTest s4 = new StaticBlockTest();
  41. // StaticBlockTest s5 = new StaticBlockTest();
  42. Thread t1 = new Thread(s);
  43. Thread t2 = new Thread(s1);
  44.  
  45.  
  46. t1.start();
  47. t2.start();
  48.  
  49. }
  50.  
  51.  
  52.  
  53. }  
相關文章
相關標籤/搜索