天天看點

使用Quartz排程多台機器的資源

需求:多執行個體機器處理各自分表

環境: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} ) ) {