成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

并發(fā)中的鎖文件模式

weknow619 / 1917人閱讀

摘要:序并發(fā)中的鎖文件模式是企業(yè)設(shè)計(jì)模式中的一種??梢允潜镜劓i,也可以分布式鎖,看文件系統(tǒng)是本地還是分布式的,算是一種比較古老的方式。代碼是原子操作要點(diǎn)檢查文件如果不存在則創(chuàng)建,要是原子操作,使用即可實(shí)現(xiàn)鎖占用過長怎么處理或者忘記解鎖怎么處理

并發(fā)中的鎖文件模式是Java企業(yè)設(shè)計(jì)模式中的一種??梢允潜镜劓i,也可以分布式鎖,看文件系統(tǒng)是本地還是分布式的,算是一種比較古老的方式。利用zk實(shí)現(xiàn)分布式鎖,其實(shí)跟這個(gè)也比較類似。zk其本質(zhì)是個(gè)樹形結(jié)構(gòu)。

代碼
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
要點(diǎn)

1、檢查文件如果不存在則創(chuàng)建,要是原子操作,使用File.createNewFile即可實(shí)現(xiàn)
2、鎖占用過長怎么處理?或者忘記解鎖怎么處理?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65801.html

相關(guān)文章

  • 第五天-《企業(yè)應(yīng)用架構(gòu)模式》-并發(fā)

    摘要:離線并發(fā)多個(gè)數(shù)據(jù)庫事務(wù)中支持多線程的各種應(yīng)用服務(wù)器并發(fā)問題丟失更新同時(shí)編輯文件,相繼保存,最終丟失先保存者更新的內(nèi)容不一致性讀取期間,數(shù)據(jù)有更新執(zhí)行語境從與外界交互角度看的個(gè)語境請求對應(yīng)于軟件工作的外部環(huán)境發(fā)出的單個(gè)調(diào)用,處理請求的軟件會決 離線并發(fā):多個(gè)數(shù)據(jù)庫事務(wù)中支持多線程的各種應(yīng)用服務(wù)器 1. 并發(fā)問題: 1)丟失更新(同時(shí)編輯文件,相繼保存,最終丟失先保存者更新的內(nèi)容) 2)不...

    linkFly 評論0 收藏0
  • 淺談Java并發(fā)編程系列(七) —— 深入解析synchronized關(guān)鍵字

    摘要:第一個(gè)字被稱為。經(jīng)量級鎖的加鎖過程當(dāng)一個(gè)對象被鎖定時(shí),被復(fù)制到當(dāng)前嘗試獲取鎖的線程的線程棧的鎖記錄空間被復(fù)制的官方稱為。根據(jù)鎖對象目前是否處于被鎖定狀態(tài),撤銷偏向后恢復(fù)到未鎖定或經(jīng)量級鎖定狀態(tài)。 Synchronized關(guān)鍵字 synchronized的鎖機(jī)制的主要優(yōu)勢是Java語言內(nèi)置的鎖機(jī)制,因此,JVM可以自由的優(yōu)化而不影響已存在的代碼。 任何對象都擁有對象頭這一數(shù)據(jù)結(jié)構(gòu)來支持鎖...

    piglei 評論0 收藏0
  • 第10章:并發(fā)和分布式編程 10.1并發(fā)性和線程安全性

    摘要:并發(fā)模塊本身有兩種不同的類型進(jìn)程和線程,兩個(gè)基本的執(zhí)行單元。調(diào)用以啟動新線程。在大多數(shù)系統(tǒng)中,時(shí)間片發(fā)生不可預(yù)知的和非確定性的,這意味著線程可能隨時(shí)暫?;蚧謴?fù)。 大綱 什么是并發(fā)編程?進(jìn)程,線程和時(shí)間片交織和競爭條件線程安全 策略1:監(jiān)禁 策略2:不可變性 策略3:使用線程安全數(shù)據(jù)類型 策略4:鎖定和同步 如何做安全論證總結(jié) 什么是并發(fā)編程? 并發(fā)并發(fā)性:多個(gè)計(jì)算同時(shí)發(fā)生。 在現(xiàn)代...

    instein 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<