對於複雜的業務sql查詢,可以考慮如下建議。
1.先通過sql查詢出主表資訊列表list.
2.for迴圈list,補充查詢主表對應的子表資訊。
3.在2的步驟中,可以使用多執行緒處理for查詢。
其中conlist 是查詢主表返回的list
//執行緒池初始化
threadpoolexecutor executor = threadpool.getthreadpool(5,8, 3000, timeunit.seconds, new linkedblockingqueue(2000));
//得到執行緒池中線程佇列
linkedblockingqueuequeue = (linkedblockingqueue) executor.getqueue();
int counttool= conlist.size();
final countdownlatch countdownlatch = new countdownlatch(counttool);
for(int i=0;i < counttool;i++) catch (sqlexception e)
//執行緒計數器 減 1
countdownlatch.countdown();
}});
}//所有子執行緒 執行完成之後 主線程再繼續向下
countdownlatch.await();
system.out.println("-------------query end------");
?
多執行緒執行sql報錯處理
原文 參考 原因 使用了多執行緒,多執行緒共享了同乙個資料庫連線,但每個execute前沒有加上互斥鎖 方法 方法一 每個execute前加上互斥鎖 lock.acquire cursor.execute command,data lock.release 方法二 方法三 所有執行緒共用乙個連線池,...
多執行緒交替執行
場景 由於業務需要多執行緒併發操作,並且多執行緒之間是有一定的依賴關係,比如a執行緒儲存資料,b執行緒則解析資料,即b執行緒是需要在a 執行緒執行完之後才開始執行,同樣a執行緒儲存資料的也需要b執行緒對資料解析完成後才開始儲存新的資料,因此a與b兩個執行緒就形成了交替實現,當然具體情況比這個複雜一些...
多執行緒交替執行
場景 由於業務需要多執行緒併發操作,並且多執行緒之間是有一定的依賴關係,比如a執行緒儲存資料,b執行緒則解析資料,即b執行緒是需要在a 執行緒執行完之後才開始執行,同樣a執行緒儲存資料的也需要b執行緒對資料解析完成後才開始儲存新的資料,因此a與b兩個執行緒就形成了交替實現,當然具體情況比這個複雜一些...