Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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,我对“线程”很陌生,不知道如何使用它。 我确实为每个测试用例创建了一个新线程,这些线程从未终止。 单关键字搜索对我来说也很好,但当我每次为一个新线程创建一个新关键字时,事情就会变得一团糟 Junit测试: public class Test{ @Test public static void someTest() { SSH ssh = new SSH(); // test logic String key = "some_v

我对“线程”很陌生,不知道如何使用它。 我确实为每个测试用例创建了一个新线程,这些线程从未终止。 单关键字搜索对我来说也很好,但当我每次为一个新线程创建一个新关键字时,事情就会变得一团糟

Junit测试:

public class Test{

    @Test
    public static void someTest() {

        SSH ssh = new SSH();

        // test logic
        String key = "some_value from test logic";

        ssh.start(key);
    }
}
SSH
线程:

public class SSH extends Thread {
    String key = "";

    public void run {
        ssh(key);
    }

    public SSH(String key) {
        this.key = key;
    }


    public static void ssh(String key) {
        // some logic
    }

}

首先,一个
线程
用于执行代码,而其他代码将在其上运行。这就像你说一个人应该从0数到100,另一个人应该说ABC。如果没有线程,这是不可能的


读取实时日志文件是一个可以通过线程解决的问题

使用如下所示的线程:

public class SSHThread extends Thread {

    private String key;
    private volatile boolean endFlag;

    public SSHThread(String key) {
        this.key = key;
    }
    // stops thread from executing
    public void stop() {
        endFlag = true;
    }

    @Override
    public void run() {
        // pre logic

        while (true) {    // runs infinitely
            if (endFlag) {
                break;

                // could also be 'return;' if there is no 'post logic'
            }

            ssh(key);
        }

        // post logic
    }
}
此线程将一直运行,直到程序停止,因此最好在退出程序之前调用
stop()
。这条线可以做你需要的任何事情

如果需要,可以将
endFlag
设置为
true
或在
ssh()中调用
stop()


一些讲座