gpt4 book ai didi

java - 让线程从 Java 中的事件监听器运行?

转载 作者:行者123 更新时间:2023-12-01 05:24:29 29 4
gpt4 key购买 nike

我有一个程序,它创建了一个类的数百个实例,每个实例都监听另一个线程,该线程只是按常规定时调度触发一个事件(以便它们都以相同的速度执行)。我希望数百个实例中的每一个都成为自己的线程,以便在触发事件时,它们都可以并行工作。对我来说有意义的是让这些类扩展 Thread 类,然后在其中包含这段代码......

public class IteratorStepListener implements StepEventListener { 
public void actionPerformed(ActionEvent e) {
start();
}
}

public void run() {
doStuff();
}

但这似乎不起作用。显然,我在这里不了解一些基本的东西。这样做的正确方法是什么?

最佳答案

好的,第一件事:克服数百个线程将并行运行的观念。在最好的情况下,它们将同时运行,即分时运行。当您进入数百个线程时,您会看到调度算法的轴承开始发光;数以千计的它们会抽烟并最终被卡住,而您将不再获得线程。

现在,也就是说,我们没有足够的代码来了解您真正在做什么,但是我注意到的一件事是您似乎没有创建新的线程。请记住,线程是一个对象;启动线程的规范方式是

  Thread t = new Thread(Runnable r);
t.run();

看起来您正在尝试 run()一遍又一遍地重复同一个线程;这种方式是疯狂的。在 Event Driven Programming 上查看 Wiki .如果你真的想有一个单独的线程来处理每个事件,你需要一个类似这样的方案(伪代码):
 processEvents: function
eventQueue: queue of Events
event: implements Runnable

-- something produces events and puts them on the queue

loop -- forever
do
Event ev := eventQueue.front
new Thread(ev).run();
od
end -- processEvents

关于java - 让线程从 Java 中的事件监听器运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166415/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com