激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java設計模式之實現對象池模式示例分享

java設計模式之實現對象池模式示例分享

2019-11-07 12:51java教程網 JAVA教程

對象池模式經常用在頻繁創建、銷毀對象(并且對象創建、銷毀開銷很大)的場景,比如數據庫連接池、線程池、任務隊列池等。本代碼簡單,沒有限制對象池大小

ObjectPool抽象父類

 

復制代碼代碼如下:


import java.util.Iterator;
import java.util.Vector;

 

public abstract class ObjectPool<T> {

   private Vector<T> locked, unlocked;   // locked是已占用的對象集合,unlocked是可用對象集合

   public ObjectPool() {
    locked = new Vector<T>();
    unlocked = new Vector<T>();
   }

   // 創建對象
   protected abstract T create();

   // 驗證對象有效性
   public abstract boolean validate(T o);

   // 使對象失效
   public abstract void expire(T o);

   // 檢出:從對象池獲取對象
   public synchronized T checkOut() {
    T t;
    if (unlocked.size() > 0) {
     Iterator<T> iter = unlocked.iterator();
     while(iter.hasNext()) {
      t = iter.next();
      if(validate(t)) {   // 對象有效
       unlocked.remove(t);
       locked.add(t);

       return t;
      }
      else {   // 對象已經失效
       unlocked.remove(t);
       expire(t);
      }
     }
    }

    // 對象池塘沒有可用對象,創建新對象
    t = create();
    locked.add(t);

    return (t);
   }

   // 檢入:釋放對象回對象池
   public synchronized void checkIn(T t) {
    locked.remove(t);
    if(validate(t)) {   // 如果對象仍有效則放回可用對象集合中
     unlocked.add(t);
    }
    else {   // 否則使對象失效
     expire(t);
    }
   }

}

 

JDBCConnectionPool子類

 

復制代碼代碼如下:


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

 

public class JDBCConnectionPool extends ObjectPool<Connection> {

 private String url, usr, pwd;

 public JDBCConnectionPool(String driver, String url, String usr, String pwd) {
  super();

  // 加載對應的數據庫驅動
  try {
   Class.forName(driver).newInstance();
  }
  catch(Exception e) {
   e.printStackTrace();
  }

  this.url = url;
  this.usr = usr;
  this.pwd = pwd;
 }

 @Override
 protected Connection create() {
  try {
   return DriverManager.getConnection(url, usr, pwd);
  }
  catch(SQLException e) {
   e.printStackTrace();
  }

  return null;
 }

 @Override
 public boolean validate(Connection o) {
  try {
   return o.isClosed();
  }
  catch(SQLException e) {
   e.printStackTrace();
  }

  return false;
 }

 @Override
 public void expire(Connection o) {
  try {
   o.close();
  }
  catch(SQLException e) {
   e.printStackTrace();
  }
  finally {
   o = null;
  }
 }

 public static void main(String[] args) {
  JDBCConnectionPool dbConnPool = new JDBCConnectionPool("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1:3306/test", "root", "123");

  // 獲取數據庫連接對象
  Connection conn = dbConnPool.checkOut();

  // 使用數據庫連接對象
  // ...

  // 釋放數據庫連接對象
  dbConnPool.checkIn(conn);

 }

}

 

 

復制代碼代碼如下:


class Pool {
   private static final MAX_AVAILABLE = 100;
   private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);

 

   public Object getItem() throws InterruptedException {
     available.acquire();
     return getNextAvailableItem();
   }

   public void putItem(Object x) {
     if (markAsUnused(x))
       available.release();
   }

   // Not a particularly efficient data structure; just for demo

   protected Object[] items = ... whatever kinds of items being managed
   protected boolean[] used = new boolean[MAX_AVAILABLE];

   protected synchronized Object getNextAvailableItem() {
     for (int i = 0; i < MAX_AVAILABLE; ++i) {
       if (!used[i]) {
          used[i] = true;
          return items[i];
       }
     }
     return null; // not reached
   }

   protected synchronized boolean markAsUnused(Object item) {
     for (int i = 0; i < MAX_AVAILABLE; ++i) {
       if (item == items[i]) {
          if (used[i]) {
            used[i] = false;
            return true;
          } else
            return false;
       }
     }
     return false;
   }

 }

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性爱视频免费 | 国产精选久久久 | 爱福利视频网 | 亚洲国产一区二区三区 | 久久99久久99免费视频 | 久久久无码精品亚洲日韩按摩 | 免费小毛片 | 欧美性生活视频免费看 | 成人精品久久久 | 国产91精品久久久久久久 | 欧美成人三级视频 | 欧美日韩高清在线观看 | 亚洲白嫩在线观看 | 久草手机视频在线观看 | 国产日产精品一区四区介绍 | 久久久久久久久久亚洲 | 九九色网站 | 九九久久视频 | 日韩精品一区二区三区中文 | 伊人成人免费视频 | 国产无遮挡一级毛片 | 久久不射电影 | 91精品国产综合久久久动漫日韩 | 91av久久| 中文字幕精品一二三四五六七八 | 日本视频免费观看 | 欧美日韩在线中文字幕 | 欧美亚洲另类在线 | 92看片淫黄大片欧美看国产片 | 亚洲码无人客一区二区三区 | 国产精品免费久久久 | 亚洲3atv精品一区二区三区 | 久久99国产精品免费网站 | 欧美日韩一区,二区,三区,久久精品 | 久久精品污 | 亚洲午夜不卡 | 国产午夜精品一区二区三区不卡 | 成人午夜精品久久久久久久蜜臀 | 久久精品视频日本 | 精品人伦一区二区三区蜜桃网站 | 亚洲国产精品99 |