最近做一个java SE程序。使用线程池进行高并发任务的处理。其中任务处理过程中会有查询数据库操作,导致任务处理非常迟缓。于是在网上查找资料。最终解决现在把有关的注意事项进行总结。一、关于线程池的注意事项。对于多个任务,线程池最好不要公用。应该把线程池分开关于线程池的代码
</pre><pre code_snippet_id="547077" snippet_file_name="blog_20141209_1_7940215" name="code" class="java">import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ChangeThreadPool { private static Logger logger = LoggerFactory.getLogger(ChangeThreadPool.class); private static ThreadPoolExecutor executor = null; // 声明一个线程池 private static int coreSize = 100; // 核心线程数 private static int maxSize = 150; // 最大线程数 private static final int KEEP_ALIVE_TIME = 60; // 生存周期 public ChangeThreadPool() { } public synchronized void syncInit() { executor = new ThreadPoolExecutor(coreSize, maxSize, KEEP_ALIVE_TIME,TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); } public static ExecutorService getInstance() { if (executor == null) { logger.debug(">>>threadPool线程池为空!"); ChangeThreadPool pool = new ChangeThreadPool(); pool.syncInit(); } return executor; } }
二、数据库注意事项
(1)对于频繁查找数据库的操作最好加上缓存,根据实际情况必须查询数据库的则必须查找
(2)最重要的一点就是数据库cpu使用率一直在100%的情况。因为高并发导致频繁查询数据库导致数据库cpu居高不下。这种情况非常有可能是查询语句中没有添加索引导致的,所以应该检查您的所有查询语句的where条件是否都添加了索引。加完索引基本就可以解决问题。
个人总结一下。免得以后写类似的程序又忘了
时间: 2024-10-11 22:00:28