多執行緒測試用例
阿新 • • 發佈:2018-12-12
package com.zhaowd.test.designPattern.singleton; import java.util.concurrent.CountDownLatch; import com.zhaowd.test.designPattern.singleton.laze.LazeTwo; public class Test { public static void main(String[] args) { int count = 2000; final CountDownLatch latch = new CountDownLatch(count); long time = System.currentTimeMillis(); for(int i = 0;i < count; i ++){ new Thread(){ @Override public void run(){ //所有執行緒執行到這裡進行阻塞,count=0時,所有執行緒從該位置同時觸發執行 try { latch.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //餓漢式:在使用前進行初始化,執行緒安全 // System.out.println(System.currentTimeMillis() + ":" + Hungry.getInstance()); //懶漢式:執行緒不安全,需要使用synchronized關鍵字(會較低效率) // System.out.println(System.currentTimeMillis() + ":" + LazeOne.getInstance()); //懶漢式-內部類/程式碼塊:執行緒安全的;注意:使用靜態內部類注意載入順序,只有用到才會載入內部類 System.out.println(System.currentTimeMillis() + ":" + LazeTwo.getInstance()); } }.start(); latch.countDown(); } System.out.println("總耗時:"+ (System.currentTimeMillis() - time)); } }