使用线程池启动不了线程

代码:

public static final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
            cpuNum,
            cpuNum * 2,
            Integer.valueOf(ConfigureParser.getPropert("KEEPALIVE_TIME")),
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<Runnable>(Integer.valueOf(ConfigureParser.getPropert("WORK_QUEUE_CONT"))),
            new ThreadPoolExecutor.CallerRunsPolicy());

public class Task implements Runnable {
    public void run(){
        ....
    }
}

Task task = new Task(logTital, senddate, map);
ThreadUtil.threadPool.execute(task);

在测试环境没有问题,线程正常启动。
但是部署到生产后Task的run方法不会被调用,通过日志可以看到Task的构造方法有被调用。
求救各位大佬!

阅读 2.2k
1 个回答

查看生产环境,发现cpu核数只有2个,最大线程数只有4个。然后代码中刚刚好有四个死循环的线程占用了所有可运行的线程。导致新添加的线程一直存在ArrayBlockingQueue队列中,不会运行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题