1. 程式人生 > >執行緒池的實際應用

執行緒池的實際應用

最近要將公司專案的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();

此外,需要注意的是多執行緒之間會涉及到共享變數衝突問題,即當你存在共用的一些變數時就要考慮在方法內部新建物件。像這邊操作資料庫的話就必須每個執行緒開一個連線,這樣執行緒之間才不會受到影響。