java x锁_基于Java名称的锁?
MySQL具有方便的功能:
SELECT GET_LOCK("SomeName")
這可用于為應(yīng)用程序創(chuàng)建簡(jiǎn)單但非常具體的基于名稱的鎖。但是,它需要數(shù)據(jù)庫(kù)連接。
我有很多情況,例如:
someMethod() {
// do stuff to user A for their data for feature X
}
簡(jiǎn)單地同步此方法是沒(méi)有意義的,因?yàn)?#xff0c;例如,如果在此期間同時(shí)為用戶B調(diào)用了此方法,則用戶B無(wú)需等待用戶A完成操作就可以開(kāi)始操作,而只需為用戶進(jìn)行操作A和功能X的組合需要等待。
使用MySql鎖,我可以執(zhí)行以下操作:
someMethod() {
executeQuery("SELECT GET_LOCK('userA-featureX')")
// only locked for user A for their data for feature X
executeQuery("SELECT RELEASE_LOCK('userA-featureX')")
}
由于Java鎖定基于對(duì)象,因此似乎需要?jiǎng)?chuàng)建一個(gè)新對(duì)象來(lái)表示此鎖定的情況,然后將其放在某個(gè)位置的靜態(tài)緩存中,以便所有線程都可以看到它。隨后針對(duì)該情況進(jìn)行鎖定的請(qǐng)求將在高速緩存中定位鎖定對(duì)象并獲取其鎖定。我試圖創(chuàng)建類似這樣的東西,但是鎖緩存本身需要同步。而且,很難檢測(cè)何時(shí)不再使用鎖定對(duì)象,以便可以將其從緩存中刪除。
我已經(jīng)看過(guò)Java并發(fā)包,但是沒(méi)有什么能夠處理這樣的事情了。有沒(méi)有簡(jiǎn)單的方法可以實(shí)現(xiàn)此目的,還是我從錯(cuò)誤的角度看待這個(gè)問(wèn)題?
編輯:
為了明確起見(jiàn),我不希望提前創(chuàng)建預(yù)定義的鎖池,而是希望根據(jù)需要?jiǎng)?chuàng)建它們。我在想的一些偽代碼是:
LockManager.acquireLock(String name) {
Lock lock;
synchronized (map) {
lock = map.get(name);
// doesn't exist yet - create and store
if(lock == null) {
lock = new Lock();
map.put(name, lock);
}
}
lock.lock();
}
LockManager.releaseLock(String name) {
// unlock
// if this was the last hold on the lock, remove it from the cache
}
總結(jié)
以上是生活随笔為你收集整理的java x锁_基于Java名称的锁?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 外星人台式机无盘服务器,可以拎走的“台式
- 下一篇: java中如何合并两个网格,Hazelc