`
xmong
  • 浏览: 263329 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java多线程设计模式之文件保存

阅读更多

Java实现多线程保存文件:两线程去保存文件,一个保存线程定时去保存文件,一个修改线程去修改文件,随机停贷后再去保存文件,如果其中一个线程已经保存过文件了,那么另一个线程来保存文件的时候就不需要保存了。
这里的保存摸拟为内容写人文件中。
类设计如下:
Data:数据类用于存储文件内容信息的类,提供修改文件内容和保存内容的方法。
SaveThread:保存线程类定时保存调用数据类的保存方法去保存文件。
ChangeThread:修改线程类不断调用数据类的修改方法修改文件,并保存。
Mian:执行入口。

实现如下:

Data:数据类
package com.blak.thread;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/**
 * 
 * @author Administrator
 *	文件数据类
 */
public class Data {

	private final String fileName;//文件名
	private String content; //文件内容
	private boolean changed; //标志文件是否被修改
	
	public Data(String name, String content){
		this.fileName = name;
		this.content = content;
		this.changed = true;
	}
	
	/**
	 * 修改文件内容,并将修改标志值为true
	 * @param content
	 */
	public synchronized void change(String content){
		this.content = content;
		changed = true;
	}
	
	/**
	 * 保存文件数据,即将数据内容写入到文件中去保存,并将修改标志值为false
	 * @throws IOException
	 */
	public synchronized void save()throws IOException{
		if(!changed)return;
		doSave(); //执行保存
		changed = false;
	}
	
	/**
	 * 将文件内容写入文件中保存
	 * @throws IOException
	 */
	public void doSave() throws IOException{
		Writer writer = new FileWriter(fileName);
		writer.write(content);
		writer.close();
		System.out.println(Thread.currentThread().getName()+" doSave content="+content);
	}

	
	
}


SaveThread:保存数据线程类
package com.blak.thread;

import java.io.IOException;


/**
 * 保存线程定时保存文件数据
 * @author Administrator
 *
 */
public class SaveThread extends Thread{

	private Data data;
	
	public SaveThread(Data data){
		super("SaveThread");
		this.data = data;
	}
	
	/**
	 * 保存线程每隔一秒检查保存文件一次
	 */
	public void run(){
		while(true){
			try {
				data.save();
				Thread.sleep(1000);//休息1秒
			} catch (IOException e) {
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
	}
	
}

ChangeThread:修改数据线程类
package com.blak.thread;

import java.io.IOException;
import java.util.Random;

/**
 * 修改文件线程,修改将文件保存
 * @author Administrator
 *
 */
public class ChangeThread extends Thread{

	private Data data;
	private Random random = new Random();
	
	public ChangeThread(Data data){
		super("ChangeThread");
		this.data = data;
	}
	
	/**
	 * 修改文件
	 */
	public void run(){
		try {
			for (int i = 0; i < 10; i++) {
				data.change("content."+i);
				Thread.sleep(random.nextInt(1000));//摸拟线程去执行其他任务
				data.save();
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	
}


Main:main执行入口

package com.blak.thread;

public class Main {
	
	/**
	 * 指定文件,启动保存线程和修改线程
	 * @param args
	 */
	public static void main(String[] args) {
		Data data = new Data("d:/data.txt", "test");
		new SaveThread(data).start();
		new ChangeThread(data).start();
	}
	

}

执行结果为:

SaveThread doSave content=test
ChangeThread doSave content=content.0
SaveThread doSave content=content.1
ChangeThread doSave content=content.2
ChangeThread doSave content=content.3
SaveThread doSave content=content.4
ChangeThread doSave content=content.5
SaveThread doSave content=content.6
ChangeThread doSave content=content.7
SaveThread doSave content=content.8
SaveThread doSave content=content.9




分享到:
评论

相关推荐

    基于Java的多线程网络爬虫设计与实现.txt

    ##### 多线程爬虫设计模式 - **MVC设计模式**:将爬虫分为模型(Model)、视图(View)和控制器(Controller)三个部分,提高代码的可维护性和可扩展性。 - **抽象类与继承**:通过定义抽象基类如`AbstractCrawler`...

    java实验(包含文件、多线程等)

    这个"java实验"的压缩包显然提供了学习和实践Java基础及高级特性的资源,特别是关于文件操作、多线程以及图形用户界面(GUI)和网络编程。 1. **文件操作**: 在Java中,我们可以使用`java.io`包来处理文件和流。...

    java Swing 多线程下载器

    总的来说,Java Swing多线程下载器结合了Java的GUI编程、多线程技术以及文件操作,为用户提供了一个功能强大的下载工具。开发这样一个程序需要深入理解Java的并发编程和Swing组件的使用,同时也需要对网络通信和文件...

    多线程搜索引擎java实现源代码

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务。在搜索引擎的实现中,多线程技术用于并行处理网页抓取、索引构建和查询服务等不同任务,提高系统效率。例如,可以创建一个线程池,每个线程负责爬取...

    java(简易)多线程HTTP服务器

    总的来说,这个“java(简易)多线程HTTP服务器”项目涵盖了Java网络编程、多线程、HTTP协议理解以及文件操作等多个核心知识点。通过实践,开发者不仅可以深入理解这些概念,还能提升解决问题和设计系统的能力。

    java多线程结合界面开发实例(原创)财务管理系统源代码和效果图[参考].pdf

    Java多线程结合界面开发实例:财务管理系统源代码和效果图 在这个实例中,我们将学习如何使用Java多线程技术结合界面开发来实现一个财务管理系统。这个系统能够实时显示财务状况,并且具有保存功能。 知识点1:...

    Java 记事本 保存 另存为 打开文件

    在Java编程环境中,开发一个具有基础记事本功能的程序是一项常见的练习,它涵盖了文件操作、文本处理以及用户界面设计等多个关键知识点。以下是对这些核心概念的详细解释: 1. **文件操作**: - **读取文件**:在...

    Java单例模式设计

    Java单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供全局访问点。这种模式在需要频繁创建和销毁对象的场景中,或者当对象昂贵时(如数据库连接),能够节省系统资源,提高效率。本篇文章将深入探讨...

    java写的打字软件 使用图形界面事件监听与多线程

    6. **设计模式**: 高质量的软件通常会遵循一定的设计模式,如模型-视图-控制器(MVC)模式,这有助于代码的组织和维护。在这个项目中,开发者可能采用了MVC来分离业务逻辑、用户界面和数据。 7. **测试与调试**: ...

    利用Java多线程技术导入数据到Elasticsearch的方法步骤

    ### Java多线程技术 Java中的多线程技术是指在同一个程序中可以同时运行多个线程来执行多个任务。Java提供了一套完整的线程管理和同步机制,使得多线程编程变得简单而强大。在Java中,可以通过实现Runnable接口或...

    JAVA Socket编程实现文件上传

    10. **设计模式**:在实现文件上传服务时,可以借鉴设计模式,如工厂模式用于创建数据库连接,单例模式用于保证服务器Socket实例的唯一性,观察者模式用于通知文件上传完成后的后续处理等。 以上就是使用Java ...

    java 读取Ftp指定位置的文件解析并入库

    标题 "java 读取Ftp指定位置的文件解析并入库" 涉及到的是使用Java编程...同时,为了提高代码质量和可维护性,遵循良好的编程规范和设计模式也很重要。在实际开发中,还应注意安全性,如防止SQL注入、保护用户凭据等。

    FileManager.zip

    6. **设计模式(Design Patterns)**:在大型项目中,设计模式是组织代码结构的重要工具。例如,单例模式可能用于确保文件系统的实例只有一个,工厂模式可以用于创建文件对象,观察者模式可以用于实时更新文件状态。...

    java的一些图片,网络编程,多线程,数据结构

    在“java的一些图片,网络编程,多线程,数据结构”这个主题中,我们可以深入探讨以下几个重要的Java编程知识点: 1. **Java 图片处理**: Java提供了多种处理图像的API,如`java.awt.image`和`javax.imageio`包。...

    多线程下载 java 版的

    总之,"多线程下载 java 版"是一个综合性的项目,涵盖了并发编程、网络编程、文件I/O、异常处理、设计模式等多个Java核心知识点,同时也考虑了用户体验和测试需求。通过这样的项目,开发者可以提升自己的全面技能。

    java_经典多线程编程

    Java多线程编程概念 - **知识点描述**:多线程编程是指在一个进程中同时运行多个线程的技术。Java语言提供了强大的线程管理功能,使得开发多线程应用程序变得相对简单。 - **详细说明**: - **程序**:计算机...

    java成绩管理期末作业(软件2.1.0版, 使用文件保存数据)

    在Java成绩管理系统中,开发者可能使用了Java的核心库,如集合框架、IO流、多线程以及异常处理等,来实现系统的功能。 二、文件保存数据 该系统使用文件保存数据,这是典型的文件I/O操作。Java的`java.io`包提供了...

    java网络文件传输(c/s)

    - 在实际应用中,可能还需要考虑错误处理、断线重连、多线程处理等多个连接、文件传输进度显示等功能。 5. **安全性与性能** - 文件传输的安全性是重要考量,可以通过加密传输或使用安全套接层(SSL/TLS)来保护...

    23种设计模式JAVA实现,例子通俗易懂

    Java作为一种广泛应用的面向对象编程语言,其灵活性和强大的功能使其成为实现设计模式的理想选择。本资源提供了23种设计模式的Java实现,通过具体的代码示例帮助开发者深入理解并掌握这些模式。 1. **单例模式...

Global site tag (gtag.js) - Google Analytics