真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

深入淺析Java中的Balking模式

深入淺析Java中的Balking模式?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

原州ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

當(dāng)現(xiàn)在不適合這個操作,或是沒有必要進(jìn)行這個操作時就直接放棄這個操作而回去。這個就是Balking模式

程序示例:

程序的需求是模擬一個自動保存的功能。自動保存是為了預(yù)防計算機(jī)忽然斷電或則軟件突然出錯的危險,定期將數(shù)據(jù)保存在文件里的功能。

1、Data類:表示是否修改,及修改函數(shù)的類
2、SaveThread類:定期保存
3、ChangeThread:修改數(shù)據(jù),保存文件
4、Main:模擬數(shù)據(jù)

package org.zhy.demo04;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
/**
 * 表示是否修改,及修改函數(shù)的類
 * @author zhengyi
 *
 */
public class Data {
  private final String fileName; //文件名稱
  private String content; //修改內(nèi)容
  private boolean changed; //是否可以修改
  //構(gòu)造函數(shù)
  public Data(String fileName,String content){
    this.fileName=fileName;
    this.content=content;
  }
  /**
   * 新的修改內(nèi)容 如果有新的需要保存的數(shù)據(jù),changed的屬性修改為true
   * 注:這個方法是用synchronized修飾的
   * 為了保護(hù)content與changed屬性用
   * synchronized修飾后就只能同時有
   * 1個線程訪問也就防止了多線程造成的臟數(shù)據(jù)
   * @param newContent
   */
  public synchronized void change(String newContent){
    content=newContent;
    changed=true;
  }
  /**
   * 保存
   */
  public synchronized void save(){
    if(!changed){ //當(dāng)changed值為false時直接return出去
      return ;
    }else{
      doSave();//調(diào)用保存方法
      changed=false; //保存后changed的值修改為false
    }
  }
  /**
   * 具體的修改方法,模擬寫到文本中。
   */
  private void doSave(){
    System.out.println("線程名稱:"+Thread.currentThread().getName()+",最新需要保存的值="+content);
    try {
      Writer writer=new FileWriter(fileName);
      writer.write(content);
      writer.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
package org.zhy.demo04;
/**
 * 定期保存的類
 * @author zhengyi
 *
 */
public class SaveThread extends Thread{
  private Data data;
  public SaveThread(String name,Data data){
    super(name);//線程名稱
    this.data=data;
  }
  public void run(){
    try {
      while(true){
        data.save(); //模擬保存方法
        Thread.sleep(1000); //休息1秒
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
package org.zhy.demo04;
import java.util.Random;
/**
 * 修改數(shù)據(jù),保存文件的類
 * @author zhengyi
 *
 */
public class ChangeThread extends Thread{
  private Data data;
  private Random random=new Random();
  public ChangeThread(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)); //模擬去做別的事情
        data.save(); //明確的要求要保存
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
package org.zhy.demo04;
public class Main {
  public static void main(String[] args) {
    Data data=new Data("data.txt", "我是默認(rèn)內(nèi)容"); //文件的名稱及文件的默認(rèn)內(nèi)容
    new ChangeThread("ChangeThread", data).start(); //手動保存
    new SaveThread("SaveThread", data).start(); //自動保存
  }
}

運行結(jié)果:

深入淺析Java中的Balking模式

什么時候使用Balking模式?

1、不需要刻意去執(zhí)行的時候
2、不想等待警戒條件時
3、警戒條件只有一次成立時

看完上述內(nèi)容,你們掌握深入淺析Java中的Balking模式的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


標(biāo)題名稱:深入淺析Java中的Balking模式
本文網(wǎng)址:http://weahome.cn/article/joddes.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部