Cần giúp bài toán sử dụng IO và thread

Sử dụng IO và thread
Đầu vào : Folder

Đẩy n file .txt liên tục vào folder,tên file theo định dạng YYYY/MM/DD_hh:mm:ss.sodong.txt

Content random : STT | Name | address | age |………… -> 1 tiến trình

n tiến trình đọc file -> folder OutPut

N thread -> lấy ra liên tục ,file ra đủ 2k dòng or 30s ghi 1 lần ,ko đc ghi file rỗng

File đã copy -> đổi tên .txt -> .done

Đảm bảo các thread đọc làm việc = nhau *

Mình đang bị vướng chỗ đồng bộ nhiều luồng ở phần tạo file và ghi file mọi người có thể cho mình hướng nên giải quyết vấn đề này như thế nào nhỉ

Người thảo luận để tìm ra cách giải hay cho một bài toán khó sẽ trở thành lập trình viên giỏi. Người hay hỏi bài tập thì không. Còn bạn thì sao?

@ZigZac28 nên nêu ra khó khăn của mình, bạn đã tìm cách làm như thế nào, khúc mắc chỗ nào. Diễn đàn là nơi thảo luận giúp nhau học chứ đâu phải nơi hỏi bài tập :cry:

@ZigZac28 xem mẫu ở topic này nhé.

1 Like

Đây là code phần tạo file và ghi file của em nếu đề 1 luồng thì nó chạy ok nhưng khi e thêm nhiều luồng vào thì loạn hết à vấn đề là e chưa biết nên sync như thế nào ạ

 public class WriteFile implements Runnable {
LinkList ln = new LinkList();
StringBuilder sb;
TimeAndContent tac = new TimeAndContent();

public WriteFile(LinkList l) {
    this.ln = l;
}

public void run() {
    writeFile();
}
public void writeFile(){
    int count =0;
    
    for (int i = 0; i < 100; i++) {
        String s = i + "_" + tac.getTime() + ".txt";
        File f = new File("E:\\2\\" + s);
        BufferedWriter bf = null;
        try {
            bf = new BufferedWriter(new FileWriter(f));
            sb = new StringBuilder();
            for (int j = 0; j < tac.randomLine(); j++) {
                sb.append(j + " | " + tac.genRandomWords(4) +  " | " + tac.genRandomWords(4) + " | " + tac.randomAge());
                sb.append((char)10);
                
            }
            bf.write(sb.toString());
                            // System.out.println(ln.getFile().toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            bf.close();
            ln.writeToLink(f);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?