亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java多線程模式之Balking模式詳解

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

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

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

例如王某在餐廳吃飯,當王某需要點餐時喊服務(wù)員需要點餐。當服務(wù)員A和B都注意到了王某點餐的示意,這時服務(wù)員B看到服務(wù)員A已經(jīng)去響應了王某的點餐請求,所以服務(wù)員B就不會再過去響應王某的點餐請求。

程序示例:

程序的需求是模擬一個自動保存的功能。自動保存是為了預防計算機忽然斷電或則軟件突然出錯的危險,定期將數(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修飾的
   * 為了保護content與changed屬性用
   * synchronized修飾后就只能同時有
   * 1個線程訪問也就防止了多線程造成的臟數(shù)據(jù)
   * @param newContent
   */
  public synchronized void change(String newContent){
    content=newContent;
    changed=true;
  }
  /**
   * 保存
   */
  public synchronized void save(){
    if(!changed){ //當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", "我是默認內(nèi)容"); //文件的名稱及文件的默認內(nèi)容
    new ChangeThread("ChangeThread", data).start(); //手動保存
    new SaveThread("SaveThread", data).start(); //自動保存
  }
}

運行結(jié)果:

什么時候使用Balking模式?

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

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

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

相關(guān)文章

  • Java實現(xiàn)SSL雙向認證的方法

    Java實現(xiàn)SSL雙向認證的方法

    這篇文章主要介紹了Java實現(xiàn)SSL雙向認證的方法,實例分析了ssl認證的原理與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • Java代碼是如何被CPU狂飆起來的

    Java代碼是如何被CPU狂飆起來的

    無論是剛剛?cè)腴TJava的新手還是已經(jīng)工作了的老司機,恐怕都不容易把Java代碼如何一步步被CPU執(zhí)行起來這個問題完全講清楚。本文就帶你詳細了解Java代碼到底是怎么運行起來的。感興趣的同學可以參考閱讀
    2023-03-03
  • Spring使用aop切面編程時要給那些類加注解的實例

    Spring使用aop切面編程時要給那些類加注解的實例

    在使用切面編程時,通常需要為以下類或組件添加注解來標識它們,以便 Spring 或其他切面框架能夠正確識別和處理它們,這篇文章主要介紹了Spring使用aop切面編程時要給那些類加注解,需要的朋友可以參考下
    2023-11-11
  • 教你如何在IDEA?中添加?Maven?項目的?Archetype(解決添加不起作用的問題)

    教你如何在IDEA?中添加?Maven?項目的?Archetype(解決添加不起作用的問題)

    這篇文章主要介紹了如何在?IDEA?中添加?Maven?項目的?Archetype(解決添加不起作用的問題),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Springboot 整合 Java DL4J 實現(xiàn)智能客服功能

    Springboot 整合 Java DL4J 實現(xiàn)智能客服功能

    本文主要介紹了如何使用SpringBoot整合JavaDeeplearning4j來構(gòu)建一個智能客服系統(tǒng),詳細探討了神經(jīng)網(wǎng)絡(luò)選擇、數(shù)據(jù)集格式、技術(shù)介紹、Maven依賴、代碼示例等內(nèi)容,為構(gòu)建高效、便捷、個性化的客戶服務(wù)提供了理論支持和實踐指導
    2024-10-10
  • idea 找不到符號或找不到包的幾種解決方法

    idea 找不到符號或找不到包的幾種解決方法

    這篇文章主要介紹了idea 找不到符號或找不到包的幾種解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • idea為java程序添加啟動參數(shù)的問題解析(program?arguments,vm?arguments,Environment?variable)并在程序中獲取使用

    idea為java程序添加啟動參數(shù)的問題解析(program?arguments,vm?arguments,Envi

    這篇文章主要介紹了idea為java程序添加啟動參數(shù)的問題解析(program?arguments,vm?arguments,Environment?variable)并在程序中獲取使用,本文給大家分享問題描述及解決方法,需要的朋友可以參考下
    2023-09-09
  • Java實現(xiàn)SMS短信通發(fā)送手機驗證碼案例講解

    Java實現(xiàn)SMS短信通發(fā)送手機驗證碼案例講解

    這篇文章主要介紹了Java實現(xiàn)SMS短信通發(fā)送手機驗證碼案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java 生成二維碼的工具資料整理

    Java 生成二維碼的工具資料整理

    本文主要介紹Java 生成二維碼的幾種方法,這里給大家詳細介紹了java生成二維碼的三種工具,并附有示例代碼供大家參考,開發(fā)java 二維碼的朋友可以參考下
    2016-08-08
  • 關(guān)于Java如何正確地實現(xiàn)方法重載詳解

    關(guān)于Java如何正確地實現(xiàn)方法重載詳解

    在一個類中,可以定義多個構(gòu)造方法,這叫做方法的重載!但是關(guān)于方法重載,具有有哪些要求和細節(jié)?在今天的這篇文章中,小編給大家詳細說說方法重載相關(guān)的內(nèi)容,需要的朋友可以參考下
    2023-05-05

最新評論