使用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} ) ) {

                        new Thread( runnable任务 , 线程名称:thread_${tableName} ).start()

                }

这样就能利用多台机器的资源。且将这个方法封装到某个Job中,方便给与Quartz管理。

posted @ 2022-07-17 12:12  小大宇  阅读(53)  评论(0编辑  收藏  举报