java中如何設計乙個簡單的連線池

2021-09-14 05:54:46 字數 2319 閱讀 5045

獲取物件的?

如果條件不滿足,wait,被通知後仍要檢查條件

條件滿足,執行對應的邏輯

synchronized(物件) 

執行task

}

獲取物件的?

改變條件

通知所有等待該物件的執行緒

synchronized(物件)
但是實際使用中,會加入超時,保證消費者不會一直等待下去,阻塞該執行緒做其他的事情;

迴圈條件中加入判斷剩餘時間remaining這個條件:

public synchronized object get(long mills) throws interruptedexception 

} else

}return condition;

}

連線池

public class connectionpool 

}public void releaseconnection(connection connection) }}

public connection fetchconnection(long mills) throws interruptedexception

} else

}return pool.isempty() ? null : pool.removefirst();}}

}

連線驅動

public class connectiondriver 

return null;}}

// 建立乙個connection的**,在commit時休眠100毫秒

public static final connection createconnection() , new connectionhandler());

}

測試**

public class connectionpooltest 

profiler.begin();

start.countdown();

end.await();

system.out.println("total invoke: " + (threadcount * count));

system.out.println("got connection: " + got);

system.out.println("not got connection " + notgot);

system.out.println("total time: " + profiler.end());

}static class connectionrunner implements runnable

/*** when an object implementing inte***cerunnableis used

* to create a thread, starting the thread causes the object's

*runmethod to be called in that separately executing

* thread.

* * the general contract of the methodrunis that it may

* take any action whatsoever.

** @see thread#run()

*/@override

public void run() catch (interruptedexception e)

for (int i = 0; i < count; i++) catch (sqlexception e) finally

} else

} catch (interruptedexception e)

}end.countdown();}}

}

如果連線池的連線數量固定,測試發現隨著客戶端執行緒增多,任務失敗比例會增大;這個很容易理解,每次都是m個執行緒,去爭搶n個資源;m大於n,就會出現無法搶到資源的執行緒,如果多次無法搶到,達到超時時間,自然就會失敗。

實際使用中,控制客戶端執行緒數量和資源數量的比例。當然任務時間和超時時間都是需要仔細考量的因素。

客戶端併發數量m, 資源池的資源數量n,單個任務時間tasktime,超時時間timeout – 成功率

如果完全公平鎖,可以保證時間t內,做完t/tasktime任務,理論可以100%成功率處理併發數為 timeout/tasktime * (n)的客戶端

乙個簡單的dao設計

最近把框架裡的資料庫連線池做好了,整個dao差不多也算完成了 因為懶,所以部分資料庫驅動還沒寫 整個dao由連線物件和解析驅動兩個部分組成,大概就是下面這個樣子 連線物件主要實現如下方法 解析器的作用是將操作狀態轉化為sql語句,主要實現以下功能 其中insert,update,query,dele...

乙個簡單API設計

用乙個紅綠燈來學習jsapi的設計 css trafficlight li trafficlight span trafficlight.stop li nth child 1 span trafficlight.wait li nth child 2 span trafficlight.pass ...

乙個簡單的JAVA網頁爬蟲

引用內容 public class access implements runnable catch exception e try catch malformedurlexception e catch ioexception e new thread this start public void...