我想问一下线程池的使用

业余编程人士 发布于 2017/04/21 14:57
阅读 88
收藏 0

其实我对线程/线程池了解不是很多 所以我想咨询一下大家,下面是一个定时的每五分钟运行下面这5个service的线程池,我想问一下,其实Service2-5运算量不大 service1运算量很大,我的理想状态是service1的话自动分给它多一点线程去运行,这样写够了吗?请学计算机的朋友指导一下。

public static void main(String[] args) { 
   final ScheduledExecutorService  exe = Executors.newScheduledThreadPool(50);  
        
    exe.scheduleAtFixedRate((service1,0,5, TimeUnit.SECONDS);
    exe.scheduleAtFixedRate((service2,0,5, TimeUnit.SECONDS);

    exe.scheduleAtFixedRate((service3,0,5, TimeUnit.SECONDS);

    exe.scheduleAtFixedRate((service4,0,5, TimeUnit.SECONDS);

    exe.scheduleAtFixedRate((service5,0,5, TimeUnit.SECONDS);
}

 

加载中
1
zhupf
zhupf

service1运算量很大,可以把service1模块拆分成多个线程。

另外看看是否可以提高service1线程的优先级。

另外线程的分配和CPU的核数有关系。尽量不要超过太多。多了的话,线程切换会浪费很多时间。

另外service1模块不能拆分,可以考虑Service2-5合并成一个线程。

因为线程同优先级的时候,假设不同线程分配的时间大致一样,这样service1可以分配到50%的时间。

Service2-5所在一个线程分配到50%的时间。

业余编程人士
业余编程人士
谢谢您额回答 受益很大,能否加您微信 如果以后有问题 可以经常在微信上和您讨教
0
horseLai
horseLai
计算量大,我觉得你得评估一下service1运行结束需要多长时间,再确定你的执行周期,起码,你的保证他执行完成再进行新一轮的执行
0
horseLai
horseLai
这样写貌似不够
0
horseLai
horseLai
如果可以的话,可以将service1拆分成几个模块
业余编程人士
业余编程人士
您的意思就是把service1 分成几个模块 然后分配不通的线程去执行 是吗
0
horseLai
horseLai
然后分配到不同线程中去计算,然后由一个线程不断监测他们的是否计算完成,如果都完成了,再整合计算结果,不过这样可控性就有点差了
返回顶部
顶部