2 つのタスクを個別に実行する必要があります。
最初のタスク
1 分に 1 回、特定のフォルダーにファイルがあるかどうかを確認する必要があります。存在する場合は、ファイルの名前をキューに追加する必要があります。
これは次のように行うことができます。
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class schedulerExample extends Thread{
public void checkFile()
{
System.out.println("checking whether file exist in folder");
}
public void getFiles()
{
System.out.println("getting the file names");
}
public void enqueueFiles()
{
System.out.println("add files to queue");
}
public static void main(String[] args) {
final schedulerExample obj = new schedulerExample();
ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(1);
executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
obj.checkFile();
obj.getFiles();
obj.enqueueFiles();
}
}, 0, 1, TimeUnit.MINUTES);
}
}
2 番目のタスク
キューが空の場合は、1 分間スリープするか、キューからファイルを 1 つずつ処理します。
public class processModel extends Thread{
public static void getQueueSize(int size)
{
System.out.println("getting queue size");
}
public void dequeue()
{
// dequeue the queue
System.out.println("dequeue");
}
public void processFile()
{
// process the file
System.out.println("process file");
}
public static void main(String[] args) {
final boolean flag = true;
final int size = 9;
final processModel obj = new processModel();
Thread t1 = new Thread(){
public void run()
{
while(flag)
{
obj.dequeue();
obj.processFile();
getQueueSize(size);
if(size == 0)
{
try
{
Thread.sleep(60000);
}
catch(InterruptedException e)
{
}
}
}
}
};
t1.start();
}
}
ここで、両方を 1 つのクラスで同時に行う必要があります。それは可能ですか?
1 つのスレッドが 1 分に 1 回ファイルを取得する必要があります。別のスレッドがファイルを 1 つずつ実行する必要があります。ファイルがない場合は、1 分間待ってから再度チェックします。2 番目の方法では、無限ループを使用しました。その代わりに、物事を 1 つずつ実行できる方法はありますか?