執行緒池的實際應用
阿新 • • 發佈:2018-11-09
最近要將公司專案的JS程式碼改造成Java程式碼,需要用到多執行緒。需求大概是這樣的:有一大批客戶,需要對這一大批客戶進行風險測評,測評涉及到對錶的update操作,這邊採用多執行緒分批對資料庫進行操作。
下面是主要程式碼結構
//建立執行緒池,設定為static if (exec == null) exec = Executors.newFixedThreadPool(coreSize); //同步計數器,協調多個執行緒之間的同步 final CountDownLatch endGate = new CountDownLatch(4); // 建立4個執行緒 for(int i = 0; i < 4; i++){ //提交任務 exec.submit(new Runnable() { @Override public void run() { doSth(param); System.out.println("執行執行緒" + Thread.currentThread().getName()); endGate.countDown(); } }); } try { endGate.await(); } catch (InterruptedException e) { e.printStackTrace(); } // 執行緒結束後,需要處理的事情 doFinalThing();
此外,需要注意的是多執行緒之間會涉及到共享變數衝突問題,即當你存在共用的一些變數時就要考慮在方法內部新建物件。像這邊操作資料庫的話就必須每個執行緒開一個連線,這樣執行緒之間才不會受到影響。