阻止线程 - Java

时间:2011-06-08 16:15:05

标签: java multithreading concurrency

这是我的问题:我有一个在本地启动模拟服务器的应用程序。此操作的输出被重定向到日志文件,我想在写入时查找此日志文件中的特定模式。

我已经实现了tail -f模拟(我必须在windows上工作),但我不能让两个线程同时正常工作。

以下是一个示例(主要内容):

server.launch();
patternFinder.start();

patternFinder扩展了Thread,这就是它的run方法:

public void run() {
    while (true) {
        //tail -f implementation

        //I'll set a timeout when I can get it 
        //to work (the pattern is supposed to be found)
    }
}

如果我将patternFinder.join()放在start()之后,服务器将暂停执行并等待patternFinder返回(但他不会因为日志中没有写入任何内容)。但是子线程需要阻塞主线程,因为我们不希望在找到模式之前执行任何指令(或者已达到超时限制)。

有什么想法吗?

(ps:第一篇文章所以如果我做错了或者你需要更多细节,请不要犹豫告诉我)

2 个答案:

答案 0 :(得分:0)

您应该使用事件来协调您的线程。您可以等待主线程中的事件,并在找到事物后在子线程上设置/重置它。

您可以使用Manual或AutoResetEvents。不确定它们在Java中被称为什么,但我相信你可以找到它。

答案 1 :(得分:0)

就这样,这个问题没有得到解答我找到了某种解决办法,但从来没有弄清楚究竟是什么问题。

显然问题是我通过ProcessBuilder启动我的服务器,其命令看起来像java [arguments] [classpath] fileToLaunch。我尝试了很多东西,但唯一有效的是将命令更改为cmd /C start java [arguments] [classpath] fileToLaunch,以便在新窗口中启动服务器,然后一切按预期工作。

如果有人能向我解释这个谜,请随时提供一个仍然可以接受的新答案。