これは質問に答えないかもしれませんが、少なくとも何が起こっているかを理解するのに役立ちます。スレッドの正確なサンプルを取得するには、アプリケーション内のリストフォームを取得します。 (代わりのデバッグツールから。)
JVM W /計装O
- スレッド:メイン
- スレッド:リファレンスハンドラ
- スレッド:シグナルディスパッチャ
- スレッド:アタッチ・リスナー
- スレッド:ファイナライザー
JVM /計装(jconsoleを)
- スレッドW:主
- スレッド:JMXサーバ接続タイムアウト12
- スレッド:RMI TCPコネクション(1)-10.1.100.40
- スレッド:RMI TCP接続(2)-10.1.100。40
- スレッド:ファイナライザ
- スレッド:リファレンスハンドラ
- スレッド:RMIは、スケジューラ(0)
- スレッド:信号Dispatcherは
- スレッド:RMI TCPのAccept-0
- スレッド:アタッチリスナー
実験
- 次のコード
- 起動jconsoleを実行して、通常のJavaプログラムを実行すると、それが実行される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を実行している場合は、IDE自体がJavaで記述されていて実行中である可能性がありますか? – DevSolar
私は興味があります - あなたは14スレッドを実行することをどのように決定していますか? – Coffee
あなたは14のスレッドがあると思いますか? –