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條件是否都添加了索引。加完索引基本就可以解決問題。

個人總結一下。免得以後寫類似的程序又忘了



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