需求:多執行個體機器處理各自分表
環境:1.多執行個體機器。2.已配置好 各台機器的IP 與 所有分表的對應關系。
效果:無論哪個機器得到的資源,它都要通過HTTP請求通知另外的執行個體去執行相應的方法。
(1)擷取到系統中所有線程
代碼參考自擷取Java VM中目前運作的所有線程 - 蒼穹冰塵
/**
* 擷取Java VM中目前運作的所有線程
* @return
*/
public static Thread[] findAllThreads() {
ThreadGroup group = Thread.currentThread().getThreadGroup();
ThreadGroup topGroup = group;
// 周遊線程組樹,擷取根線程組
while (group != null) {
topGroup = group;
group = group.getParent();
}
// 激活的線程數加倍
int estimatedSize = topGroup.activeCount() * 2;
Thread[] slacks = new Thread[estimatedSize];
//擷取根線程組的所有線程
int actualSize = topGroup.enumerate(slacks);
Thread[] threads = new Thread[actualSize];
System.arraycopy(slacks, 0, threads, 0, actualSize);
return threads;
}
(2)通過目前IP查到該機器需要處理的分表。
(3)對所有線程進行周遊,然後判斷是否有處理某張分表的thread_${tableName}線程。
沒有則啟動。 已啟動則忽略。
僞代碼:
if ( JVM中所有線程 . 不包含 ( thread_${tableName} ) ) {