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

資訊專欄INFORMATION COLUMN

Java多線程基礎(chǔ)(六)——Balking模式

Faremax / 2467人閱讀

摘要:二模式案例該案例會(huì)保存數(shù)據(jù)的屬性,之前所保存的屬性都會(huì)被覆蓋。當(dāng)線程執(zhí)行時(shí),只有滿足警戒條件時(shí),才會(huì)繼續(xù)執(zhí)行,否則會(huì)立即返回。警戒條件的成立與否,會(huì)隨著參與者的狀態(tài)而變化。注上述示例中,類就是被警戒的對(duì)象參與者,方法是,方法是。

一、定義

Balking是“退縮不前”的意思。Balking Pattern和Guarded Suspension Pattern 一樣需要警戒條件。在Balking Pattern中,當(dāng)警戒條件不成立時(shí),會(huì)馬上中斷,而Guarded Suspension Pattern 則是等待到可以執(zhí)行時(shí)再去執(zhí)行。

二、模式案例

該案例會(huì)保存數(shù)據(jù)的屬性,之前所保存的屬性都會(huì)被覆蓋。如果當(dāng)前數(shù)據(jù)的屬性與上次保存的屬性并無(wú)不同,就不執(zhí)行保存。

Data定義:

public class Data {
    private String filename;     // 文件名
    private String content;      // 數(shù)據(jù)內(nèi)容
    private boolean changed;     // 標(biāo)識(shí)數(shù)據(jù)是否已修改
    public Data(String filename, String content) {
        this.filename = filename;
        this.content = content;
        this.changed = true;
    }
    // 修改數(shù)據(jù)
    public synchronized void change(String newContent) {
        content = newContent;
        changed = true;
    }
    // 若數(shù)據(jù)有修改,則保存,否則直接返回
    public synchronized void save() throws IOException {
        if (!changed) {
            System.out.println(Thread.currentThread().getName() + " balks");
            return;
        }
        doSave();
        changed = false;
    }
    private void doSave() throws IOException {
        System.out.println(Thread.currentThread().getName() + " calls doSave, content = " + content);
        Writer writer = new FileWriter(filename);
        writer.write(content);
        writer.close();
    }
}

修改線程定義:

//修改線程模仿“一邊修改文章,一邊保存”
public class ChangerThread extends Thread {
    private Data data;
    private Random random = new Random();
    public ChangerThread(String name, Data data) {
        super(name);
        this.data = data;
    }
    public void run() {
        try {
            for (int i = 0; true; i++) {
                data.change("No." + i);
                Thread.sleep(random.nextInt(1000));
                data.save();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

存儲(chǔ)線程定義:

//存儲(chǔ)線程每個(gè)1s,會(huì)對(duì)數(shù)據(jù)進(jìn)行一次保存,就像文本處理軟件的“自動(dòng)保存”一樣。
public class SaverThread extends Thread {
    private Data data;
    public SaverThread(String name, Data data) {
        super(name);
        this.data = data;
    }
    public void run() {
        try {
            while (true) {
                data.save(); // 存儲(chǔ)資料
                Thread.sleep(1000); // 休息約1秒
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

執(zhí)行:

public class Main {
    public static void main(String[] args) {
        Data data = new Data("data.txt", "(empty)");
        new ChangerThread("ChangerThread", data).start();
        new SaverThread("SaverThread", data).start();
    }
}
三、模式講解

Balking 模式的角色如下:

GuardedObject(被警戒的對(duì)象)參與者

GuardedObject參與者是一個(gè)擁有被警戒的方法(guardedMethod)的類。當(dāng)線程執(zhí)行g(shù)uardedMethod時(shí),只有滿足警戒條件時(shí),才會(huì)繼續(xù)執(zhí)行,否則會(huì)立即返回。警戒條件的成立與否,會(huì)隨著GuardedObject參與者的狀態(tài)而變化。

注:上述示例中,Data類就是GuardedObject(被警戒的對(duì)象)參與者,save方法是guardedMethod,change方法是stateChangingMethod。

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

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

相關(guān)文章

  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強(qiáng))

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡(jiǎn)介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁(yè)左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無(wú)意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡(jiǎn)而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評(píng)論0 收藏0
  • Java線程基礎(chǔ)(二)——Java內(nèi)存模型

    摘要:一主存儲(chǔ)器與工作存儲(chǔ)器內(nèi)存模型分為主存儲(chǔ)器和工作存儲(chǔ)器兩種。工作存儲(chǔ)器每個(gè)線程各自獨(dú)立所擁有的作業(yè)區(qū),在中,存有中的部分拷貝,稱之為工作拷貝。注意線程欲退出時(shí),不會(huì)執(zhí)行工作存儲(chǔ)器的釋放操作。 一、主存儲(chǔ)器與工作存儲(chǔ)器 Java內(nèi)存模型(memory model)分為主存儲(chǔ)器(main memory)和工作存儲(chǔ)器(working memory)兩種。 主存儲(chǔ)器(main memory)...

    huhud 評(píng)論0 收藏0
  • Java線程進(jìn)階()—— J.U.C之locks框架:AQS綜述(1)

    摘要:在時(shí),引入了包,該包中的大多數(shù)同步器都是基于來(lái)構(gòu)建的。框架提供了一套通用的機(jī)制來(lái)管理同步狀態(tài)阻塞喚醒線程管理等待隊(duì)列。指針用于在結(jié)點(diǎn)線程被取消時(shí),讓當(dāng)前結(jié)點(diǎn)的前驅(qū)直接指向當(dāng)前結(jié)點(diǎn)的后驅(qū)完成出隊(duì)動(dòng)作。 showImg(https://segmentfault.com/img/remote/1460000016012438); 本文首發(fā)于一世流云的專欄:https://segmentfau...

    cocopeak 評(píng)論0 收藏0
  • 三年Java后端面試經(jīng)歷

    摘要:前言三年后端開發(fā)經(jīng)驗(yàn),面的目標(biāo)崗位是的高級(jí)后端開發(fā)。面試結(jié)束,應(yīng)該沒有后續(xù)。 前言 三年Java后端開發(fā)經(jīng)驗(yàn),面的目標(biāo)崗位是20k-35k的高級(jí)后端Java開發(fā)。 第一場(chǎng),基本裸面,關(guān)于曾經(jīng)的項(xiàng)目部門答的不好,所以還是得好好準(zhǔn)備。 某C輪在線旅游公司 筆試 先做半個(gè)小時(shí)的筆試題,一共六個(gè)題目,兩道go語(yǔ)言的基礎(chǔ)題,一道斐波那契相關(guān),一道數(shù)據(jù)庫(kù)行列轉(zhuǎn)置,一道實(shí)現(xiàn)一個(gè)棧,還有一道是百萬(wàn)計(jì)...

    darry 評(píng)論0 收藏0
  • 【全棧之路】JAVA基礎(chǔ)課程_集合(20190615v1.0)

    摘要:歡迎進(jìn)入基礎(chǔ)課程博客地址本系列文章將主要針對(duì)一些基礎(chǔ)知識(shí)點(diǎn)進(jìn)行講解,為平時(shí)歸納所總結(jié),不管是剛接觸開發(fā)菜鳥還是業(yè)界資深人士,都希望對(duì)廣大同行帶來(lái)一些幫助。是同步的,而不是。因此,更適合于單線程環(huán)境,而適合于多線程環(huán)境。 歡迎進(jìn)入JAVA基礎(chǔ)課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對(duì)JAVA一些基礎(chǔ)知識(shí)點(diǎn)進(jìn)行講解,為平時(shí)歸納所總...

    dkzwm 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<