`
hanlu0221
  • 浏览: 14000 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

多线程设计模式之——Balking Pattern

阅读更多
Balking Pattern 与 Guarded Suspension Pattern 都需要警戒条件,只不过Balking Pattern中,当警戒条件不成立时,不进行wait,直接中断。

Balking Pattern的适用性:
1.不需要刻意执行的时候,balk可以提高性能
2.不想等待警戒条件成立的时候
3.警戒条件只需第一次成立的时候,例如初始化操作

例子:仅类似“自动保存功能”,通过此模式,防止重复保存。

所需的类:
Date:数据类;
AutosaverThread:定期自动保存数据的线程类;
ChngsaverThread:自己修改并保存的线程类;
Main:测试类


//Date.java
import java.io.FileWriter;
import java.io.IOException;
public class Date {
	public final String filename; //保存的文件名
	public String context;        //保存的内容
	public boolean changedFlag;   //若内容修改后,没被保存,则为true
	
	public Date(String filename , String context){
		this.filename = filename;
		this.context = context;
		this.changedFlag = true;
	}
	
	//内容修改方法
	public synchronized void change(String newcontext){
		context = newcontext;
		changedFlag = true;
	}
	
	//若内容有修改,则保存
	public synchronized void save() throws IOException{
		if(!changedFlag){       //警戒条件
			return;             //即balk操作,若已保存或未修改,则终止操作
		}
		doSave();
		changedFlag = false;
	}
	
	//实际将数据保存到文件中的方法
	public void doSave() throws IOException{
		System.out.println(Thread.currentThread().getName() + " calls doSave, context:" + context);
		FileWriter fw = new FileWriter(filename);
		fw.write(context);
		fw.close();
	}

}



//AutosaverThread.java

import java.io.IOException;
public class AutosaverThread extends Thread{
	private Date date;
	
	AutosaverThread(String name , Date date){
		super(name);
		this.date = date;
	}
	
	public void run(){
		try{
			while(true){
				date.save();
				Thread.sleep(1000);
				}
			}catch(InterruptedException e){
				e.printStackTrace();
			}catch(IOException e){
				e.printStackTrace();
			}
		}

}


//ChngsaverThread.java

import java.io.IOException;
import java.util.Random;
public class ChngsaverThread extends Thread{
	private Date date;
	private Random random = new Random();
	
	ChngsaverThread(String name , Date date){
		super(name);
		this.date = date;
	}
	
	public void run(){
		for(int i=1; i<21; i++){
			try {
				date.change("he is fang" + i);
				Thread.sleep(random.nextInt(1000));
				date.save();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	}

}



//Main.java

public class Main {

	public static void main(String[] args) {
		Date date = new Date("d.txt", "i am lulu ");
		new AutosaverThread("AAAAthread", date).start();
		new ChngsaverThread("CCCCthread", date).start();
	}

}
分享到:
评论

相关推荐

    java多线程设计模式详解(PDF及源码)

    书中包含Java线程的介绍导读、12个重要的线程设计模式和全书总结以及丰富的附录内容。第一章相关线程设计模式的介绍,都举一反三使读者学习更有效。最后附上练习问题,让读者可以温故而知新,能快速地吸收书中的...

    java多线程设计模式 (PDF中文版, 附源码)

    目录: 漫谈UML Introduction 1 Java语言的线程 Introduction 2 多线程...总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API 附录E 参考文献

    【Java 设计模式-源码】Balking 模式:智能控制 Java 执行

    该模式对于管理多线程 Java 应用程序中的状态和并发至关重要。 三、Balking 模式的详细解释及实际示例 实际示例: Balking 设计模式的一个现实世界类比可以在洗衣服务中看到。想象一下自助洗衣店中的洗衣机,只有在...

    Java多线程模式之Balking模式详解

    Java中的Balking模式是一种多线程设计模式,它主要用于处理多个线程可能对同一资源进行操作的情况,但当发现其他线程已经准备执行相同的操作时,一个线程会选择放弃执行,避免不必要的竞争条件和资源浪费。这个模式...

    Java多线程详解

    Java多线程模式详解 目录: 一、漫谈UML Java语言的线程 多线程的评量标准 二、 1、Single Threaded Execution ———— 能通过这座桥的,只有一个人 2、Immutable ———— 想破坏它也没办法 3、Guarded ...

    java8源码-GraphicMultiThreadDesignPattern:图解Java多线程设计模式

    记录自己学习《图解Java多线程设计模式》这本书的全部过程 本书上传的所有代码都是可以运行的,在此附上本书源码地址: 在此向本书作者和译者表示感谢 运行环境 Eclipse版本:Oxygen.2 Release (4.7.2) JDK版本:jdk...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段41讲、多线程设计模式内容回顾与总结.mp4 │ 高并发编程第二阶段42讲、ClassLoader课程大纲介绍.mp4 │ 高并发编程第二阶段43讲、类加载的过程以及类主动使用的六种情况详细介绍.mp4 │ 高...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段41讲、多线程设计模式内容回顾与总结.mp4 │ 高并发编程第二阶段42讲、ClassLoader课程大纲介绍.mp4 │ 高并发编程第二阶段43讲、类加载的过程以及类主动使用的六种情况详细介绍.mp4 │ 高...

    北京一家JAVA开发公司面试题

    - **Balking模式**:用于避免不必要的同步操作,如果发现资源状态不需要同步时,则不会进入临界区。 - **读写锁(Read/Write Lock)**:允许多个线程同时读取共享资源,但在写入时只允许一个线程访问。 - **生产...

    queueing thoery

    值得注意的是,当客户到达但未加入队列,我们称之为“拒载”(balking)。 服务过程是队列理论的另一个核心要素,它涉及到客户服务时间的分布。服务时间可以是均匀的,也可以遵循其他概率分布,如指数分布。服务...

    Pattens In Java.pdf

    - 当需要提高多线程环境下的性能时,因为不可变对象可以安全地在多个线程之间共享。 #### 1.4 标记接口(Marker Interface) **使用:** 标记接口是一种特殊的接口类型,它没有任何方法声明。它主要用于表示某种...

    59-演示文稿-UML交互建模1

    消息可以有不同类型,包括同步消息(sync)、异步消息(async)、超时消息(time-out)以及阻塞消息(Uncommitted / Balking)等。 同步消息通常会导致发送方等待接收方的响应,而异步消息则允许发送方在不等待响应...

Global site tag (gtag.js) - Google Analytics