java文件设计怎么保存,java多线程设计形式之文件保存

本文介绍了如何使用Java设计一个多线程模型,两个线程协同工作,一个定期保存文件,一个实时修改,避免重复保存。通过`Data`类管理内容,`SaveThread`和`ChangeThread`负责线程操作,确保并发下文件一致性。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值