Chào mọi người, em đang làm bài tập về đồng bộ hóa trong java.
Đề bài yêu cầu: Viết chương trình tạo ra đối tượng đọc tập tin, viết tập tin chạy ở từng tiến trình
riêng (có xử lý đồng bộ hóa dư liệu).
Vậy ở đây phải tạo ra 2 class đọc và viết tập tin riêng đúng không ạ?
Và làm thế nào để trong một thời điểm chỉ có thể đọc hoặc ghi trên một file ạ?
ở đây em tạo 2 class như sau:
class FileTWrite để ghi tập tin:
// FileTWriter.java
package lab5;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class FileTWrite implements Runnable {
private String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public FileTWrite(String fileName) {
this.fileName = fileName;
}
// Viết dãy số ngẫu nhiên vào file
@Override
public void run() {
try {
FileWriter fw = new FileWriter(new File(this.getFileName()));
BufferedWriter bw = new BufferedWriter(fw);
for(int i = 0 ; i < 100; i++){
int rand = (int) (Math.random() * 100);
bw.write(rand + "\t");
}
bw.close();
fw.close();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new FileTWrite("test1.txt"));
Thread t2 = new Thread(new FileTWrite("test2.txt"));
Thread t3 = new Thread(new FileTWrite("test3.txt"));
t1.start();
t2.start();
t3.start();
System.out.println("Done!");
}
}
class FileTReader để đọc
// FileTReader.java
package lab5;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class FileTReader implements Runnable {
String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public FileTReader(String fileName) {
this.fileName = fileName;
}
@Override
public void run() {
try {
FileReader fr = new FileReader(new File(this.getFileName()));
BufferedReader br = new BufferedReader(fr);
int c;
while((c = br.read()) != -1) {
System.out.println(this.getFileName() + ": " + c);
}
br.close();
fr.close();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new FileTReader("test1.txt"));
Thread t2 = new Thread(new FileTReader("test2.txt"));
Thread t3 = new Thread(new FileTReader("test3.txt"));
t1.start();
t2.start();
t3.start();
}
}
Giờ em tạo đối tượng ghi file test.txt trước, rồi đọc file test.txt đó bằng FileTReader nhưng lại ko ra kết quả ạ
class Test:
package test;
import lab5.FileTReader;
import lab5.FileTWrite;
public class Test {
public static void main(String[] args) {
FileTWrite ftw = new FileTWrite("test.txt");
Thread t1 = new Thread(ftw);
FileTReader fwr = new FileTReader("test.txt");
Thread t2 = new Thread(fwr);
t1.start();
t2.start();
}
}
Em đã thêm synchronized vào hàm run() của cả 2 class mà vẫn không được.
Ai giải thích cho em cái cơ chế đồng bộ này với ạ. Em cám ơn.