摘要:序并發中的鎖文件模式是企業設計模式中的一種。可以是本地鎖,也可以分布式鎖,看文件系統是本地還是分布式的,算是一種比較古老的方式。代碼是原子操作要點檢查文件如果不存在則創建,要是原子操作,使用即可實現鎖占用過長怎么處理或者忘記解鎖怎么處理
序
并發中的鎖文件模式是Java企業設計模式中的一種。可以是本地鎖,也可以分布式鎖,看文件系統是本地還是分布式的,算是一種比較古老的方式。利用zk實現分布式鎖,其實跟這個也比較類似。zk其本質是個樹形結構。
代碼import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; /** * Subclass of RandomAccessFile that always ensures that it * has exclusive access to a file before opening it. */ public class ExclusiveRandomAccessFile extends RandomAccessFile { private static final String LOCK_FILE_SUFFIX = ".lck"; private File lockFile; /** * Open the named file using a lock file to ensure * exclusive access. * @param fileName The name of the file to open. * @param mode This should either be "r" for read-only * access or "rw" for read-write access. * @exception FileSharingException * If there is already a lock file for the named * file. * @exception IOException * If there is a problem opening the file */ public static ExclusiveRandomAccessFile openExclusive(String fileName, String mode) throws IOException { File lockFile = new File(fileName+LOCK_FILE_SUFFIX); //createNewFile是原子操作 if (!lockFile.createNewFile()) { // lock file already exists throw new FileSharingException(fileName); } // if return new ExclusiveRandomAccessFile(fileName, mode, lockFile); } // openExclusive(String) /** * Construct a RandomAccessFile that has exclusive access * to the given file. * @param fileName The name of the file to open. * @param mode This should either be "r" for read-only * access or "rw" for read-write access. * @param lockFile A file object that identifies the lock * file. */ private ExclusiveRandomAccessFile(String fileName, String mode, File lockFile) throws IOException { super(fileName, mode); this.lockFile = lockFile; } // constructor(String, String) /** * Close this file. */ public synchronized void close() throws IOException { if (lockFile!=null) { // If file is still open lockFile.delete(); lockFile = null; super.close(); } // if } // close() } class FileSharingException extends IOException { public FileSharingException(String msg) { super(msg); } // constructor(String) } // class FileSharingException要點
1、檢查文件如果不存在則創建,要是原子操作,使用File.createNewFile即可實現
2、鎖占用過長怎么處理?或者忘記解鎖怎么處理?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65801.html
摘要:離線并發多個數據庫事務中支持多線程的各種應用服務器并發問題丟失更新同時編輯文件,相繼保存,最終丟失先保存者更新的內容不一致性讀取期間,數據有更新執行語境從與外界交互角度看的個語境請求對應于軟件工作的外部環境發出的單個調用,處理請求的軟件會決 離線并發:多個數據庫事務中支持多線程的各種應用服務器 1. 并發問題: 1)丟失更新(同時編輯文件,相繼保存,最終丟失先保存者更新的內容) 2)不...
摘要:第一個字被稱為。經量級鎖的加鎖過程當一個對象被鎖定時,被復制到當前嘗試獲取鎖的線程的線程棧的鎖記錄空間被復制的官方稱為。根據鎖對象目前是否處于被鎖定狀態,撤銷偏向后恢復到未鎖定或經量級鎖定狀態。 Synchronized關鍵字 synchronized的鎖機制的主要優勢是Java語言內置的鎖機制,因此,JVM可以自由的優化而不影響已存在的代碼。 任何對象都擁有對象頭這一數據結構來支持鎖...
摘要:并發模塊本身有兩種不同的類型進程和線程,兩個基本的執行單元。調用以啟動新線程。在大多數系統中,時間片發生不可預知的和非確定性的,這意味著線程可能隨時暫停或恢復。 大綱 什么是并發編程?進程,線程和時間片交織和競爭條件線程安全 策略1:監禁 策略2:不可變性 策略3:使用線程安全數據類型 策略4:鎖定和同步 如何做安全論證總結 什么是并發編程? 并發并發性:多個計算同時發生。 在現代...
閱讀 1679·2021-11-19 09:40
閱讀 2934·2021-09-24 10:27
閱讀 3221·2021-09-02 15:15
閱讀 1882·2019-08-30 15:54
閱讀 1206·2019-08-30 15:54
閱讀 1375·2019-08-30 13:12
閱讀 637·2019-08-28 18:05
閱讀 2803·2019-08-27 10:53