代码:
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的构造方法有被调用。
求救各位大佬!
查看生产环境,发现cpu核数只有2个,最大线程数只有4个。然后代码中刚刚好有四个死循环的线程占用了所有可运行的线程。导致新添加的线程一直存在ArrayBlockingQueue队列中,不会运行。