Java - 在 EventListener 中创建线程

标签 java multithreading jvm runtime

我得到了这段代码:

Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        OctopusWSClient.sendPoolSensorReading(poolSensorReading, OctopusClientStart.currentMacAddress);
                    }
                });
                thread.setName("Thread - WS");
                thread.start();

在大约每 30 秒执行一次的事件监听器中(当事件发生时),因此每 30 秒创建一个新线程,通常持续 20 秒才能完成,现在,我的问题是......可以以这种方式调用线程?如果不是,如何???...而且,我正在使用此代码查看线程 ID 和名称:

Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
                for(Thread t : threadSet){
                    System.out.println(" Thread #"+t.getId()+" Name: "+t.getName());
                }

它会打印当前线程的 ID 和名称,我总是看到相同数量的线程,但 ID 总是递增 1(线程 - WS)。

这是一个坏信号吗?它会在一段时间内填满 JVM 内存吗?

谢谢

最佳答案

您可能会发现通知单个线程恢复比创建多个线程更好。如果需要 20 秒才能完成,最后锁定它并让它等待,直到它从事件监听器获得重新启动循环的命令。

关于Java - 在 EventListener 中创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14737541/

相关文章:

用户级和内核级线程的并发性。为什么输出不同?

Java进程间通信和线程间通信?

java - 检查您的模块类路径是否存在缺失或冲突的依赖项

java - 在 Java 中从数组中获取时出错

java sql连接

java - 如何统计广告点击量并存入数据库

java - 为什么我们在启动 jvm 时指定最小和最大堆内存

java - ESB 应该如何打包/部署?

java - 使用 AsynchronousSocketChannel 时出现 ReadPendingException

java - 如何通过 JNI 调用 Java 方法,让 JVM 垃圾收集参数?