Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 为什么TailerListener executor会将文件中的行打印两次?_Java_File_Executor_Taillistener - Fatal编程技术网

Java 为什么TailerListener executor会将文件中的行打印两次?

Java 为什么TailerListener executor会将文件中的行打印两次?,java,file,executor,taillistener,Java,File,Executor,Taillistener,我想跟踪一个文本文件,我想使用Executor实现这个目的,问题是每当我运行以下代码时,我每行打印两次,我一行一行地打印完整的文件,跳过最后一行,然后再次开始打印相同的行,我尝试使用线程而不是Executor,它在那里工作正常。 加上它没有打印文本文件的最后一行 public static void helper() { TailerListener listener = new TailListener(); Tailer tailer = Tailer.create(n

我想跟踪一个文本文件,我想使用Executor实现这个目的,问题是每当我运行以下代码时,我每行打印两次,我一行一行地打印完整的文件,跳过最后一行,然后再次开始打印相同的行,我尝试使用线程而不是Executor,它在那里工作正常。 加上它没有打印文本文件的最后一行

   public static void helper()
{
    TailerListener listener = new TailListener();
    Tailer tailer = Tailer.create(new File("E:\\terilium\\code\\productive-coder-si-bookstore-master\\kafka_runtime\\testing_files\\test.txt"),
            listener, SLEEP);
    Executor executor = new Executor()
    {
        public void execute(Runnable command)
        {
            command.run();
        }
    };
    executor.execute(tailer);

}  class TailListener extends  TailerListenerAdapter
{
    public void handle(String line)
    {
        System.out.println(line);
    }
}
我希望输出与写入文本文件的文本相同

   public static void helper()
{
    TailerListener listener = new TailListener();
    Tailer tailer = Tailer.create(new File("E:\\terilium\\code\\productive-coder-si-bookstore-master\\kafka_runtime\\testing_files\\test.txt"),
            listener, SLEEP);
    Executor executor = new Executor()
    {
        public void execute(Runnable command)
        {
            command.run();
        }
    };
    executor.execute(tailer);

}  class TailListener extends  TailerListenerAdapter
{
    public void handle(String line)
    {
        System.out.println(line);
    }
}
这是执行者的行为还是我遗漏了什么我不明白为什么这件事会有那么大的问题

谢谢


打印重复行是因为有两个线程监视并打印同一行:

  • 通过静态方法创建的线程
    Tailer.create(…)
  • 由执行器创建的线程
  • 您可能想摆脱执行器,让
    线程创建一次

    您必须确保父线程不退出。一种简单的方法是
    while(true){}