1

フォルダーにファイルが存在するかどうかを確認する必要があるという要件があります。はいの場合は、1 つずつ処理する必要があります。私の基本的な知識で、以下に投稿したコード構造にたどり着きました。

無限ループを作成し、そのフォルダーにファイルが存在するかどうかを確認しています。はいの場合は、スレッドを作成して処理しています。それ以外の場合は、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 の回答を参照してください。

2 つの違いは次のようにうまくまとめられています: 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 に答える