java SE程序关于高并发的注意事项

最近做一个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条件是否都添加了索引。加完索引基本就可以解决问题。

个人总结一下。免得以后写类似的程序又忘了



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章