❶ java 中幾種常用的線程池
一:newCachedThreadPool
(1)緩存型池子,先查看池中有沒有以前建立的線程,如果有,就reuse,如果沒有,就建立一個新的線程加入池中;
(2)緩存型池子,通常用於執行一些生存周期很短的非同步型任務;因此一些面向連接的daemon型server中用得不多;
(3)能reuse的線程,必須是timeout IDLE內的池中線程,預設timeout是60s,超過這個IDLE時長,線程實例將被終止及移出池。
(4)注意,放入CachedThreadPool的線程不必擔心其結束,超過TIMEOUT不活動,其會自動被終止
二:newFixedThreadPool
(1)newFixedThreadPool與cacheThreadPool差不多,也是能reuse就用,但不能隨時建新的線程
(2)其獨特之處:任意時間點,最多隻能有固定數目的活動線程存在,此時如果有新的線程要建立,只能放在另外的隊列中等待,直到當前的線程中某個線程終止直接被移出池子
(3)和cacheThreadPool不同,FixedThreadPool沒有IDLE機制(可能也有,但既然文檔沒提,肯定非常長,類似依賴上層的TCP或UDP IDLE機制之類的),所以FixedThreadPool多數針對一些很穩定很固定的正規並發線程,多用於伺服器
(4)從方法的源代碼看,cache池和fixed 池調用的是同一個底層池,只不過參數不同:
fixed池線程數固定,並且是0秒IDLE(無IDLE)
cache池線程數支持0-Integer.MAX_VALUE(顯然完全沒考慮主機的資源承受能力),60秒IDLE
三:ScheledThreadPool
(1)調度型線程池
(2)這個池子里的線程可以按schele依次delay執行,或周期執行
四:SingleThreadExecutor
(1)單例線程,任意時間池中只能有一個線程
(2)用的是和cache池和fixed池相同的底層池,但線程數目是1-1,0秒IDLE(無IDLE)
❷ java idleconnectiontestperiod和maxidletime的區別
樓主描述正是MySQL8小時問題,這個問題還是比較容易解決的。
樓主用的連接池是C3P0嗎?這里我以C3P0連接池為例來說明問題原因和解決方法。
問題原因:MySQL默認是自動關閉空閑超過8小時的連接,而C3P0並不知道該connection已經失效,如果這時有Client請求connection,C3P0將該失效的Connection提供給Client,將會造成異常。重啟Tomcat操作會使C3P0重新建立和資料庫的連接池,且池內的連接都是有效的連接。
解決方法:c3p0要在8小時內關閉不使用的連接。這需要修改其中的一些配置參數,主要是maxIdleTime和idleConnectionTestPeriod。這兩個參數的值要小於28800秒。
建議配置如下:
<!-- 每次都驗證連接是否可用 -->
<property name="hibernate.c3p0.validate">true</property>
<!-- 檢查連接池中所有空閑連接的間隔時間,單位為秒(要注意的是MySQL的自動關閉空閑超過8小時連接的機制) -->
<property name="hibernate.c3p0.idle_test_period">18000</property>
<!-- 連接的最大空閑時間,25000秒內未使用則連接被丟棄。單位為秒(要注意的是MySQL的自動關閉空閑超過8小時連接的機制) -->
<property name="hibernate.c3p0.timeout">25000</property>
附上在 hibernate中配置c3p0的關鍵字。
c3p0.acquireIncrement hibernate.c3p0.acquire_increment
c3p0.idleConnectionTestPeriod hibernate.c3p0.idle_test_period
c3p0.maxIdleTime hibernate.c3p0.timeout
c3p0.maxPoolSize hibernate.c3p0.max_size
c3p0.maxStatements hibernate.c3p0.max_statements
c3p0.minPoolSize hibernate.c3p0.min_size
❸ java資料庫連接池最大連接數最小連接數怎麼設置
最大連接數:這個連接池最多能有幾條連接,如果初始化的連接數沒有了專,用戶可以創建,屬但是要給個判斷不能超過最大連接數。
最小連接數:就是連接池初始化的連接(連接池初始化多少條連接)
// 設置最大連接數,(根據並發請求合理設置)。
config.setMaxTotal(100);
// 設置最大空閑連接數,(根據並發請求合理設置)
config.setMaxIdle(20);
// 多長空閑時間之後回收空閑連接
setMinEvictableIdleTimeMillis(60000);
// 設置最小空閑連接數或者說初始化連接數
config.setMinIdle(10);
// 設置最大等待時間
config.setMaxWaitMillis(500);
// 跟驗證有關
config.setTestOnBorrow(true);
// 跟驗證有關
config.setTestOnReturn(false);
// 啟動空閑連接的測試
config.setTestWhileIdle(false);
❹ java程序堆內存溢出錯誤如何解決
把eclipse的內存調大一點,在eclipse的目錄下面有一個eclipse.ini文件,打開調一下-XX:MaxPermSize=250m的大小!除了這點以外,如果你的代碼寫的有問題,那就是需要你自己改下代碼的!