欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java多線程中的Balking模式詳解

 更新時間:2022年01月25日 10:39:54   作者:腦機(jī)接口社區(qū)  
大家好,本篇文章主要講的是Java多線程中的Balking模式詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

1.場景

自動保存功能:

為防止電腦死機(jī),而定期將數(shù)據(jù)內(nèi)容保存到文件中的功能。

2.詳細(xì)說明

當(dāng)數(shù)據(jù)內(nèi)容被修改時,內(nèi)容才會被保存。即當(dāng)寫入的內(nèi)容與上次寫入的內(nèi)容一致時,其實就沒有必要執(zhí)行寫入操作。也就是說,以”數(shù)據(jù)內(nèi)容是否一致”作為守護(hù)條件。若數(shù)據(jù)內(nèi)容相同,則不執(zhí)行寫入操作,直接返回。

3.Balking模式的本質(zhì):停止并返回

如果現(xiàn)在不合適執(zhí)行該操作,或者沒有必要執(zhí)行該操作,就停止處理,直接返回—-Balking模式。

要實現(xiàn)上述描述的場景,我們需要設(shè)計四個類:數(shù)據(jù)類Data,修改內(nèi)容的線程類WriterThread,保存數(shù)據(jù)的線程類,啟動線程的類。類圖如下:

Java多線程模式-Balking模式_多線程

當(dāng)數(shù)據(jù)類Data里的內(nèi)容被修改時,守護(hù)條件”數(shù)據(jù)內(nèi)容是否一致”變?yōu)閒alse,則進(jìn)行保存工作:保存工作可由定時保存功能完成也可由修改內(nèi)容的線程類完成。如果守護(hù)條件為true,則直接返回,不執(zhí)行保存操作。

源代碼如下:

數(shù)據(jù)類

public class Data{
    private final String filename;//保存文件的名稱
    private String content;//數(shù)據(jù)的內(nèi)容
    private boolean changed;//內(nèi)容是否已保存的標(biāo)志,若修改后為保存,則為true

    public Data(String filename,String content){
        this.filename=filename;
        this.content=content;
        this.changed=true;
    }
    //修改數(shù)據(jù)內(nèi)容
    public synchronized void change(String newContent){
        content=newContent;
        changed=true;
    }

    //若數(shù)據(jù)內(nèi)容修改過,則保存到文件中
    public synchronized void save() throws IOException{
        if(!changed){
            return;
        }
        doSave();
        changed=false;
    }
    //將數(shù)據(jù)保存到文件中
    private void doSave() throws IOException {
        // TODO Auto-generated method stub
        StdOut.println(Thread.currentThread().getName()+" calls doSave,content= "+content);
        Writer writer=new FileWriter(filename);
        writer.write(content);
        writer.close();
    }
}

修改內(nèi)容的線程類

public class WriterThread extends Thread {
    private final Data data;
    private final Random random=new Random();
    public WriterThread(String name,Data data){
        super(name);
        this.data=data;
    }
    public void run(){
        try {
            for(int i=0;true;i++){
                data.change("NO."+i);//修改數(shù)據(jù)
                Thread.sleep(random.nextInt(1000));//執(zhí)行其他操作
                data.save();
            }
        } catch (InterruptedException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

定時保存數(shù)據(jù)的線程類

public class SaverThread extends Thread {
    private final Data data;
    public SaverThread(String name,Data data){
        super(name);
        this.data=data;
    }

    public void run(){
        try {
            while(true){
                data.save();//保存數(shù)據(jù)
                Thread.sleep(1000);//休眠約1秒
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

啟動線程的類

public class Main {

    public static void main(String[] args) {
        Data data=new Data("data1.txt", "empty");
        new WriterThread("ChangerThead",data).start();
        new SaverThread("SaverThread", data).start();
    }
}

總結(jié)

到此這篇關(guān)于Java多線程中的Balking模式詳解的文章就介紹到這了,更多相關(guān)Java多線程Balking模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合Echarts實現(xiàn)數(shù)據(jù)大屏

    SpringBoot整合Echarts實現(xiàn)數(shù)據(jù)大屏

    這篇文章給大家介紹了三步實現(xiàn)SpringBoot全局日志記錄,整合Echarts實現(xiàn)數(shù)據(jù)大屏,文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-03-03
  • Android開發(fā)在輪播圖片上加入點擊事件的方法

    Android開發(fā)在輪播圖片上加入點擊事件的方法

    這篇文章主要介紹了Android開發(fā)在輪播圖片上加入點擊事件的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • Spring中AOP的切點、通知、切點表達(dá)式及知識要點整理

    Spring中AOP的切點、通知、切點表達(dá)式及知識要點整理

    這篇文章主要介紹了Spring中AOP的切點、通知、切點表達(dá)式及知識要點整理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java如何利用狀態(tài)模式(state pattern)替代if else

    Java如何利用狀態(tài)模式(state pattern)替代if else

    這篇文章主要給大家介紹了關(guān)于Java如何利用狀態(tài)模式(state pattern)替代if else的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 深入理解Hibernate中的懶加載異常及解決方法

    深入理解Hibernate中的懶加載異常及解決方法

    這篇文章主要為大家介紹了深入理解Hibernate中的懶加載異常及解決方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-10-10
  • Java 數(shù)據(jù)庫時間返回前端顯示錯誤(差8個小時)的解決方法

    Java 數(shù)據(jù)庫時間返回前端顯示錯誤(差8個小時)的解決方法

    本文主要介紹了Java 數(shù)據(jù)庫時間返回前端顯示錯誤(差8個小時)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • 使用MQ消息隊列的優(yōu)缺點詳解

    使用MQ消息隊列的優(yōu)缺點詳解

    這篇文章主要介紹了使用MQ消息隊列的優(yōu)缺點詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • RestTemplate發(fā)送請求時Cookie的影響及注意事項說明

    RestTemplate發(fā)送請求時Cookie的影響及注意事項說明

    這篇文章主要介紹了RestTemplate發(fā)送請求時Cookie的影響及注意事項說明,具有很好的參考價值,希望對大家有所幫助。
    2023-07-07
  • 利用Springboot+Caffeine實現(xiàn)本地緩存實例代碼

    利用Springboot+Caffeine實現(xiàn)本地緩存實例代碼

    Caffeine是一個基于Java8開發(fā)的提供了近乎最佳命中率的高性能的緩存庫,下面這篇文章主要給大家介紹了關(guān)于利用Springboot+Caffeine實現(xiàn)本地緩存的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Spring?異步接口返回結(jié)果的四種方式

    Spring?異步接口返回結(jié)果的四種方式

    這篇文章主要介紹了Spring?異步接口返回結(jié)果的四種方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-08-08

最新評論