1

我得到了这个代码:

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

位于大约每 30 秒执行一次的事件侦听器中(当事件发生时),因此每 30 秒创建一个新线程,通常持续 20 秒才能完成,现在,我的问题是......可以调用 Threads 这个方式?,如果没有,如何???...而且,我正在使用以下代码查看线程 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 内存吗?

谢谢

4

1 回答 1

4

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

于 2013-02-06T19:54:06.017 回答