ChangerThread:修改并保存数据内容的类
public class ChangerThread extends Thread {
private final Data data;
private final Random random = new Random ( ) ;
public ChangerThread ( String name, Data data) {
super ( name) ;
this . data = data;
}
public void run ( ) {
try {
for ( int i = 0 ; true ; i++ ) {
data. change ( "no. " + i) ;
Thread . sleep ( random. nextInt ( 1000 ) ) ;
data. save ( ) ;
}
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
}
Data:表示可以修改并保存的数据的类
public class Data {
private final String filename;
private String content;
private boolean changed;
public Data ( String filename, String content) {
this . filename = filename;
this . content = content;
this . changed = true ;
}
public synchronized void change ( String newContent) {
content = newContent;
changed = true ;
}
public synchronized void save ( ) throws IOException {
if ( ! changed) {
return ;
}
doSave ( ) ;
changed = false ;
}
private void doSave ( ) throws IOException {
System . out. println ( Thread . currentThread ( ) . getName ( ) + " calls do save,content " + content) ;
Writer writer = new FileWriter ( filename) ;
writer. write ( content) ;
writer. close ( ) ;
}
}
Main
public class Main {
public static void main ( String [ ] args) {
Data data = new Data ( "data.txt" , "(empty)" ) ;
new ChangerThread ( "ChangerThread" , data) . start ( ) ;
new ServerThread ( "SaverThread" , data) . start ( ) ;
}
}
ServerThread:定期保存数据内容的类
public class ServerThread extends Thread {
private final Data data;
public ServerThread ( String name, Data data) {
super ( name) ;
this . data = data;
}
public void run ( ) {
try {
while ( true ) {
data. save ( ) ;
Thread . sleep ( 1000 ) ;
}
} catch ( Exception e) {
}
}
}