日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pool(二)——动手入门

發布時間:2024/3/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pool(二)——动手入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?1.定義自己的MyConnection

public class MyConnection {private static Logger logger = LoggerFactory.getLogger(MyConnection.class);private String name;private boolean connected;public MyConnection(String name) {this.name = name;}public void connect() {this.connected = true;logger.info(name + ": " + true);}public void close() {this.connected = false;logger.info(name + ": " + false);}public boolean isConnected() {return this.connected;}public String getName() {return this.name;}public void print() {logger.info(this.name);} }

2.定義工廠

public class MyConnectionFactory2 implements PooledObjectFactory<MyConnection> {private static Logger logger = LoggerFactory.getLogger(MyConnectionFactory.class);private static AtomicInteger count = new AtomicInteger(0);public PooledObject<MyConnection> makeObject() throws Exception {return new DefaultPooledObject<>(_makeObject());}@Override public void destroyObject(PooledObject<MyConnection> p) throws Exception {destroyObject(p.getObject());}@Override public boolean validateObject(PooledObject<MyConnection> p) {return validateObject(p.getObject());}@Override public void activateObject(PooledObject<MyConnection> p) throws Exception {activateObject(p.getObject());}@Override public void passivateObject(PooledObject<MyConnection> p) throws Exception {passivateObject(p.getObject());}private MyConnection _makeObject() throws Exception {MyConnection myConn = new MyConnection(generateName());logger.info(myConn.getName());myConn.connect();return myConn;}private void activateObject(MyConnection myConn) throws Exception {logger.info(myConn.getName());}private void passivateObject(MyConnection myConn) throws Exception {logger.info(myConn.getName());}private boolean validateObject(MyConnection myConn) {logger.info(myConn.getName());return myConn.isConnected();}private void destroyObject(MyConnection myConn) throws Exception {logger.info(myConn.getName());myConn.close();}private synchronized String generateName() {return "conn_" + (count.incrementAndGet());} }

池化對象工程,這里的池化對象是MyConnection,這個工廠就是負責產生MyConnection對象的,產生的對象會放到池子中。

3.初始化對象池

public static GenericObjectPool<MyConnection> initPool(int max, int min) {PooledObjectFactory<MyConnection> factory = new MyConnectionFactory2();GenericObjectPoolConfig config = new GenericObjectPoolConfig();config.setLifo(false);config.setMaxTotal(max);config.setMaxIdle(max);config.setMinIdle(min);config.setMaxWaitMillis(5 * 1000);// 取不到等待的超時間config.setTimeBetweenEvictionRunsMillis(5 * 1000);// 構造方法,會建立idle object,建立了兩個return new GenericObjectPool<>(factory, config);}

4.對象池中對象數量控制

初始化對象池,后臺Task {@link BaseGenericObjectPool.Evictor#run} 會調用{@link BaseGenericObjectPool#ensureMinIdle} 保證idleObjects
保證{@link GenericObjectPool#idleObjects} 對象的size和{@link GenericObjectPool#getMinIdle}一致。
但是如果 {@link GenericObjectPool#createCount} == {@link GenericObjectPool#maxTotal}
{@link GenericObjectPool#create} 方法就無法繼續創建對象了
{@link GenericObjectPool#borrowObject} 如果到了過期時間依然沒有獲取到
就會拋出異常 {@link java.util.NoSuchElementException} 異常
?

總結

以上是生活随笔為你收集整理的pool(二)——动手入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。