我的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
});
}
我在这里找不到什么东西?