我收到了这段代码:
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内存吗?
感谢
答案 0 :(得分:4)
您可能会发现通知单个线程恢复更好,而不是创建多个线程。如果完成需要20秒,最后将其锁定并使其等待,直到它从事件侦听器获得重新启动循环的命令。