【发布时间】:2013-02-06 19:51:30
【问题描述】:
我得到了这个代码:
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?,如果不是,如何???...而且,我正在使用以下代码查看 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 内存吗?
谢谢
【问题讨论】:
-
sendPoolSensorReading 是静态方法,不实现 Runnable
-
您可以改用executor service
-
这就是线程池的设计目的。它们消除了永久构造和销毁线程的开销。
标签: java multithreading jvm runtime