最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線(xiàn)程模式之Balking模式詳解

 更新時(shí)間:2017年06月09日 09:59:03   作者:qq7342272  
這篇文章主要介紹了Java多線(xiàn)程模式之Balking模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了Balking模式的原理、用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Java多線(xiàn)程模式之Balking模式。分享給大家供大家參考,具體如下:

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

例如王某在餐廳吃飯,當(dāng)王某需要點(diǎn)餐時(shí)喊服務(wù)員需要點(diǎn)餐。當(dāng)服務(wù)員A和B都注意到了王某點(diǎn)餐的示意,這時(shí)服務(wù)員B看到服務(wù)員A已經(jīng)去響應(yīng)了王某的點(diǎn)餐請(qǐng)求,所以服務(wù)員B就不會(huì)再過(guò)去響應(yīng)王某的點(diǎn)餐請(qǐng)求。

程序示例:

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

1、Data類(lèi):表示是否修改,及修改函數(shù)的類(lèi)
2、SaveThread類(lèi):定期保存
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ù)的類(lèi)
 * @author zhengyi
 *
 */
public class Data {
  private final String fileName; //文件名稱(chēng)
  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
   * 注:這個(gè)方法是用synchronized修飾的
   * 為了保護(hù)content與changed屬性用
   * synchronized修飾后就只能同時(shí)有
   * 1個(gè)線(xiàn)程訪(fǎng)問(wèn)也就防止了多線(xiàn)程造成的臟數(shù)據(jù)
   * @param newContent
   */
  public synchronized void change(String newContent){
    content=newContent;
    changed=true;
  }
  /**
   * 保存
   */
  public synchronized void save(){
    if(!changed){ //當(dāng)changed值為false時(shí)直接return出去
      return ;
    }else{
      doSave();//調(diào)用保存方法
      changed=false; //保存后changed的值修改為false
    }
  }
  /**
   * 具體的修改方法,模擬寫(xiě)到文本中。
   */
  private void doSave(){
    System.out.println("線(xiàn)程名稱(chēng):"+Thread.currentThread().getName()+",最新需要保存的值="+content);
    try {
      Writer writer=new FileWriter(fileName);
      writer.write(content);
      writer.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

package org.zhy.demo04;
/**
 * 定期保存的類(lèi)
 * @author zhengyi
 *
 */
public class SaveThread extends Thread{
  private Data data;
  public SaveThread(String name,Data data){
    super(name);//線(xiàn)程名稱(chēng)
    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ù),保存文件的類(lèi)
 * @author zhengyi
 *
 */
public class ChangeThread extends Thread{
  private Data data;
  private Random random=new Random();
  public ChangeThread(String name,Data data){
    super(name);//線(xiàn)程名稱(chēng)
    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)容"); //文件的名稱(chēng)及文件的默認(rèn)內(nèi)容
    new ChangeThread("ChangeThread", data).start(); //手動(dòng)保存
    new SaveThread("SaveThread", data).start(); //自動(dòng)保存
  }
}

運(yùn)行結(jié)果:

什么時(shí)候使用Balking模式?

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

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Spring定時(shí)任務(wù)實(shí)現(xiàn)與配置(一)

    Spring定時(shí)任務(wù)實(shí)現(xiàn)與配置(一)

    這篇文章主要為大家詳細(xì)介紹了Spring定時(shí)任務(wù)的實(shí)現(xiàn)與配置第一篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Spring整合mybatis實(shí)現(xiàn)過(guò)程詳解

    Spring整合mybatis實(shí)現(xiàn)過(guò)程詳解

    這篇文章主要介紹了Spring整合mybatis實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Spring Boot日志收集及鏈路追蹤實(shí)現(xiàn)示例

    Spring Boot日志收集及鏈路追蹤實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Spring Boot日志收集及鏈路追蹤實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java修改maven的默認(rèn)jdk版本為1.7的方法

    Java修改maven的默認(rèn)jdk版本為1.7的方法

    這篇文章主要介紹了Java修改maven的默認(rèn)jdk版本為1.7的方法,需要的朋友可以參考下
    2018-02-02
  • 一文讀懂Jvm類(lèi)加載機(jī)制

    一文讀懂Jvm類(lèi)加載機(jī)制

    這篇文章主要介紹了一文讀懂Jvm類(lèi)加載機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • executor包執(zhí)行器功能

    executor包執(zhí)行器功能

    這篇文章主要介紹了executor包執(zhí)行器功能,executor包中的各個(gè)子包提供的功能,最終這些功能都由Executor接口及其實(shí)現(xiàn)類(lèi)共同對(duì)外提供服務(wù)。下文介紹該執(zhí)行功能,具有一定的參考價(jià)值,需要的朋友可以考一下
    2022-02-02
  • Spring組件初始化擴(kuò)展點(diǎn)BeanPostProcessor的作用詳解

    Spring組件初始化擴(kuò)展點(diǎn)BeanPostProcessor的作用詳解

    本文通過(guò)實(shí)戰(zhàn)案例和常見(jiàn)應(yīng)用場(chǎng)景詳細(xì)介紹了BeanPostProcessor的使用,并強(qiáng)調(diào)了其在Spring擴(kuò)展中的重要性,感興趣的朋友一起看看吧
    2025-03-03
  • Java AES加密和解密教程

    Java AES加密和解密教程

    這篇文章主要介紹了Java AES加密和解密的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-12-12
  • Redis在springboot中的使用教程

    Redis在springboot中的使用教程

    這篇文章主要介紹了Redis在springboot中的使用教程,本文實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-06-06
  • springboot上傳圖片文件步驟詳解

    springboot上傳圖片文件步驟詳解

    這篇文章主要介紹了springboot上傳圖片文件步驟詳解,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論

忻城县| 娱乐| 郁南县| 阜新| 涪陵区| 象山县| 前郭尔| 阳东县| 瑞金市| 石河子市| 荃湾区| 威信县| 健康| 仙桃市| 客服| 肥城市| 桑植县| 绥芬河市| 牟定县| 万安县| 汶川县| 独山县| 手游| 阳曲县| 曲沃县| 柘城县| 砀山县| 新邵县| 岑巩县| 桂东县| 无为县| 崇文区| 嘉黎县| 衡阳县| 凉山| 航空| 新乐市| 织金县| 乌兰察布市| 陵水| 曲水县|