这可能不会回答这个问题,但至少有助于理解发生了什么。要获得线程的准确示例,请在您的应用程序中获取列表表单。 (而不是从调试工具。)
JVM W/O仪器
- 主题:主要
- 主题:指向处理器
- 主题:信号调度
- 主题:附上听众
- 主题:终结者
JVM瓦特/仪器(JConsole的)
- 螺纹:主
- 螺纹:JMX服务器连接超时12
- 螺纹:RMI TCP连接(1)-10.1.100.40
- 主题:RMI TCP连接(2)-10.1.100。40
- 螺纹:终结
- 螺纹:参考处理程序
- 螺纹:RMI调度器(0)
- 线程:信号分派器
- 螺纹:RMI TCP接受-0
- 线程:附加监听
实验
- 执行下面的代码
- 启动JConsole的,并连接到JVM
public class JVM {
public static void main(String... args) throws InterruptedException {
for (java.util.Enumeration<?> e = System.getProperties().propertyNames(); e.hasMoreElements();) {
String prp = (String) e.nextElement();
if (prp.startsWith("java.vm") || prp.startsWith("os.")) {
System.out.format("[%s]=%s%n", prp, System.getProperty(prp));
}
}
java.text.DateFormat df = new java.text.SimpleDateFormat("HH:mm:ss.SSS");
for(;;) {
System.out.format("%s Sampling current threads...%n", df.format(new java.util.Date()));
java.util.Map<Thread, StackTraceElement[]> stacks = Thread.getAllStackTraces();
System.out.format("> Thread Count: %d%n", stacks.size());
for (java.util.Map.Entry<Thread, StackTraceElement[]> entry : stacks.entrySet()) {
Thread thread = entry.getKey();
StackTraceElement[] stack = entry.getValue();
System.out.format("> Thread: %s%n", thread.getName());
// Throwable t = new Throwable("Thread: " + thread.getName());
// t.setStackTrace(stack);
// t.printStackTrace(System.out);
}
java.util.concurrent.TimeUnit.SECONDS.sleep(10);
}
}
}
输出
[java.vm.version]=16.2-b04
[java.vm.vendor]=Sun Microsystems Inc.
[java.vm.name]=Java HotSpot(TM) Client VM
[java.vm.specification.name]=Java Virtual Machine Specification
[os.arch]=x86
[java.vm.specification.vendor]=Sun Microsystems Inc.
[os.name]=Windows XP
[os.version]=5.1
[java.vm.specification.version]=1.0
[java.vm.info]=mixed mode, sharing
14:03:49.199 Sampling current threads...
> Thread Count: 5
> Thread: main
> Thread: Reference Handler
> Thread: Signal Dispatcher
> Thread: Attach Listener
> Thread: Finalizer
14:03:59.200 Sampling current threads...
> Thread Count: 10
> Thread: main
> Thread: JMX server connection timeout 12
> Thread: RMI TCP Connection(1)-10.1.100.40
> Thread: RMI TCP Connection(2)-10.1.100.40
> Thread: Finalizer
> Thread: Reference Handler
> Thread: RMI Scheduler(0)
> Thread: Signal Dispatcher
> Thread: RMI TCP Accept-0
> Thread: Attach Listener
来源
2011-10-08 19:12:00
TJR
你是如何运行你的代码?如果您是从IDE内运行它的,那么您的IDE本身是否可以用Java编写(并运行)? – DevSolar
我很好奇 - 你如何确定它运行14个线程? – Coffee
是什么让你觉得有14个线程? –