1

我有一个要求,我必须检查文件夹中是否存在任何文件。如果是,那我需要一一处理。凭借我的基本知识,我已经得出了我在下面发布的代码结构。

我正在创建一个无限循环并检查该文件是否存在于该文件夹中。如果是,那么我正在创建一个线程并对其进行处理,否则它会等待一分钟并再次检查。

class sample {    
    synchronized int getNoOfFiles() {
        // get number of files in the folder
    }    
    synchronized void openFile() {
        // open one file
    }
    synchronized void getFileContents() {
        // get the file content
    }
    synchronized void processFileContent() {
        //performing some operation on file contents
    }    
    synchronized void closeFile() {
        //closing the file
    }    
    synchronized void deleteFile() {
        //delete the file
    }

}    
class Test {    
    public static void main(String args[]) {
        int flag=0;
        Sample obj = new Sample();
        while(1) {
            flag = obj.getNoOfFiles();    
            if(flag) {
                for(i=0;i<flag;i++) {
                    MyThread1 t1 = new MyThread1() {
                        public void run() {
                            obj.openFile();
                            obj.getFileContents();
                            obj.processFileContent();
                            obj.closeFile();
                            obj.deleteFile();
                        }
                    };    
                    t1.start();
                }
            }
            else {
                try {
                    Thread.sleep(60000);
                }
            }    
        }
    }    
}
4

2 回答 2

3

我建议您不要自己做这种事情,而是看一下Timer类,它可以用来执行重复性任务。因为手动搞乱线程通常会导致奇怪的错误。

更好的是ScheduledThreadPoolExecutor但如果您以前从未使用过执行器,它可能会有点复杂。请参阅 Keppil 的答案以了解如何执行此操作。

两者之间的差异在这里得到了很好的总结:Java Timer vs ExecutorService?.

于 2012-10-18T20:07:55.507 回答
2

我建议使用ScheduledExecutorService

ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(1);
executor.scheduleAtFixedRate(new Runnable() {
        public void run()
        {
            obj.openFile();
            obj.getFileContents();
            obj.processFileContent();
            obj.closeFile();
            obj.deleteFile();
         }
    }, 0, 1, TimeUnit.MINUTES);
于 2012-10-18T20:08:25.633 回答