Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查文件是否同时执行_Java_Multithreading - Fatal编程技术网

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的样式约定。