java semphore實現 簡單資料庫連線池

2021-09-25 00:00:26 字數 945 閱讀 6229

首先我們先介紹一下什麼是訊號量:

類似於我們去公共澡堂洗澡,需要先去前台付款拿到儲物櫃的鑰匙,如過沒有空閒的儲物櫃,我們就需要一直等待,直到有別人洗完澡,讓出儲物櫃,這裡的鑰匙就相當於訊號量(有限的數量)。

訊號量可以使共享變數可被指定數量的執行緒訪問。

乙個計數器,乙個等待佇列,三個方法。在訊號量模型裡,計數器和等待佇列對外是透明的,所以只能通過訊號量模型提供的三個方法來訪問它們,這三個方法分別是:init()、down() 和 up()。

init():設定計數器的初始值。對應於semahore 中的初始化。

down():計數器的值減 1;如果此時計數器的值小於 0,則當前執行緒將被阻塞,否則當前執行緒可以繼續執行。對應於 acquire

up():計數器的值加 1;如果此時計數器的值小於或者等於 0,則喚醒等待佇列中的乙個執行緒(而不是所有執行緒,如果喚醒所有的執行緒,此時可能不符合臨界條件),並將其從等待佇列中移除。對應於release

互斥是一種初始值為1的訊號量

public class datasourcepool {

private final copyonwritearraylistlist;

//用到了訊號量

private final semaphore semaphore;

public datasourcepool(int size) throws sqlexception {

list = new copyonwritearraylist<>();

semaphore = new semaphore(size);

for (int i=0;i可以看下這個部落格 

比較老的有cp30,dbcp 連線池,不建議使用,效能一級監控都不是太好。

新的:阿里巴巴的druid , springboot預設使用的連線池 hikaricp 

公式:連線數 = ((核心數 * 2) + 有效磁碟數)

實現簡版 call

在學習 this 指向時,我們知道如果乙個函式作為物件的方法執行時,this 指向這個物件 那麼實現 call 可以參考這個思路 1.在物件上新增函式 2.執行物件方法 3.刪除為了改變 this 而在物件上新增的函式 實現如下 1 這裡要用 function 不能用箭頭函式,要通過 this 獲取...

極簡版shared ptr實現

程式如下 標頭檔案 ifndef pch h define pch h include includeusing namespace std class like shared ptr 接受指標的建構函式 like shared ptr string a location a number new ...

Springboot ELK實現日誌系統簡單搭建

前面簡單介紹了elk三劍客中的其中兩個elasticsearch和kibana的簡單使用,如果對這兩個不了解,可以看下下面的 centos7安裝elasticsearch和kibana 搜尋引擎基礎 分詞和倒排索引簡述 elasticsearch基礎入門 現在來看看這最後乙個logstash 還是這...