嗨,我是初学者,如果听起来很天真,我很抱歉。
我想实现一个在后台运行并一直监听的线程。通过监听我的意思是说它继续检查从主线程返回的值,如果vaue超过某个数字,它执行某种方法,或者说退出程序。
如果你能给我一些想法或至少推荐我一些有用的东西,那就太棒了。
答案 0 :(得分:2)
您不希望此线程在循环中运行,不断轮询该值,因为这会浪费处理。
理想情况下,当值发生变化时,会主动通知监听器。这将要求修改受监视值的任何代码都调用特殊方法。侦听器可能没有必要在单独的线程中运行;它取决于听众在收到通知时所做的事情。
如果无法更改修改值的代码,那么您可以做的最好是每隔一段时间检查一次该值。您不会立即看到更改,并且可能会完全错过更改,因为值在一段时间内会多次更改。
哪种解决方案最适合您的情况?
答案 1 :(得分:1)
您可以在Java Tutorials中找到有关使用线程的一些信息(如果您不熟悉Java中的并发性,我建议您首先阅读本教程)。特别是this section可能对您有用(它显示了如何创建和启动新线程)。
答案 2 :(得分:1)
如果您只需要从另一个线程轮询结果,请尝试使用@Piotr建议的java.util.concurrent
包。以下是如何执行此操作的具体示例:
import java.util.concurrent.*;
class Main{
public static void main(String[] args) throws Exception{
//Create a service for executing tasks in a separate thread
ExecutorService ex = Executors.newSingleThreadExecutor();
//Submit a task with Integer return value to the service
Future<Integer> otherThread = ex.submit(new Callable<Integer>(){
public Integer call(){
//do you main logic here
return 999;//return the desired result
}
}
//you can do other stuff here (the main thread)
//independently of the main logic (in a separate thread)
//This will poll for the result from the main
//logic and put it into "result" when it's available
Integer result = otherTread.get();
//whatever you wanna do with your result
}
}
希望这有帮助。
答案 3 :(得分:0)
我猜你可以简单地使用gui组件作为主线程,就像JTextField一样, 然后阅读事件处理,您将能够轻松地收听文本字段输入值的状态更改。
答案 4 :(得分:0)
actionlistener就是你要找的。在这里查看http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/ActionListener.html