Java 检查文件是否同时执行
我需要独立完成两项任务 第一项任务 每分钟检查一次特定文件夹中是否有文件。如果有,它应该将文件名添加到队列中 这可以通过以下方式完成:Java 检查文件是否同时执行,java,multithreading,Java,Multithreading,我需要独立完成两项任务 第一项任务 每分钟检查一次特定文件夹中是否有文件。如果有,它应该将文件名添加到队列中 这可以通过以下方式完成: import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class schedulerExample e
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);
}
}
第二项任务
如果队列为空,请睡眠一分钟,或者逐个处理队列中的文件
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();
}
}
现在我需要在一个类中同时执行这两个操作。可能吗
一个线程应该每分钟提取一次文件。另一个线程应该逐个执行文件。。如果没有文件,它会等待一分钟,然后再次检查。在第二种方法中,我使用了一个无限循环——相反,有没有一种方法可以让我一个接一个地执行任务?当您从队列对象获取文件并向其添加文件时,对其进行同步 在读取的线程中,如果队列为空,则调用
wait()
。在检查新文件的线程中,将新文件添加到队列后,调用
notify()
通常是这样做的
还应防止将正在处理的文件添加到队列中。从队列对象获取文件以及向其添加文件时,在队列对象上进行同步 在读取的线程中,如果队列为空,则调用
wait()
。在检查新文件的线程中,将新文件添加到队列后,调用
notify()
通常是这样做的
你也应该避免将正在处理的文件添加到队列中。
< P>你可能想考虑使用java来使用S。这可用于轻松分解任务并允许它们并行运行。除此之外,你还可以得到一个未来,允许你随时检查结果(如果没有检查结果,可以推迟检查) 有一本关于java和并发的好书叫做《实践中的并发》除此之外,Java7还提供了允许目录上的文件侦听器的新功能。这可能允许您抽象这个“检查和循环”功能。
您可能想考虑使用java来使用S。这可用于轻松分解任务并允许它们并行运行。除此之外,你还可以得到一个未来,允许你随时检查结果(如果没有检查结果,可以推迟检查)
有一本关于java和并发的好书叫做《实践中的并发》除此之外,Java7还提供了允许目录上的文件侦听器的新功能。这可能允许您抽象此“检查并循环”功能。如果第一个文件仍在处理中,该怎么办?类名应以大写字母开头;字段、方法参数和变量应以小写字母开头。这是Java的样式约定。如果第一个文件仍在处理中怎么办?类名应该以大写字母开头;字段、方法参数和变量应以小写字母开头。这是Java的样式约定。