数据库关闭时,Threadpool停止工作

时间:2015-11-03 15:11:21

标签: java mysql mqtt bonecp

我的java服务有问题,当我们的数据库CPU利用率上升时出现问题。现在我想知道为什么在数据库(mysql)恢复后我的java服务不会恢复正常。 我正在使用使用bonecp 0.7.1 RELEASE的数据库池

这是我用过的CachedThreadPool:

final int MAX_CORES = Runtime.getRuntime().availableProcessors();
protected ExecutorService threadPool = new ThreadPoolExecutor(MAX_CORES,MAX_CORES ,
        60L, TimeUnit.SECONDS,
        new SynchronousQueue<Runnable>(),
        new DiscardPolicy());

我有一个丢弃政策,当发生类似线程池的事情不能容纳新任务时。我把它放在我的待定并发哈希映射中以供以后工作。

public class DiscardPolicy extends ThreadPoolExecutor.DiscardPolicy{

    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
        // TODO Auto-generated method stub
        super.rejectedExecution(r, e);
        Constants.pendingRunnables.put(e, r);

    }

}

这是我获取任务的MqttServer

@Override
    public void messageArrived(final String topic, final MqttMessage message) throws Exception {

        try{
            if(Constants.pendingRunnables.size() > 0){
                for(java.util.Map.Entry<ThreadPoolExecutor, Runnable> runner : Constants.pendingRunnables.entrySet()){
                    Constants.pendingRunnables.remove(runner.getKey());
                    runner.getKey().execute(runner.getValue());

                }
            }
        }catch(Exception e){

        }
    threadPool.execute(new Runnable(){
        // any kind of task to run depending on what topic
    });
}

我在这里找不到什么东西?

0 个答案:

没有答案