Имя 2 потока Java Java - PullRequest
       10

Имя 2 потока Java Java

1 голос
/ 23 августа 2009

Я готовлюсь к экзамену по Java, и на прошлом экзамене лектор задал этот вопрос, и мне интересно, может ли кто-нибудь помочь мне понять его:

В контексте темы объяснения Java. Приведите пример, когда вы можете использовать поток. Назовите два потока виртуальной машины Java.

Первые две части вопроса достаточно просты, но часть, касающаяся именования двух потоков виртуальных машин, действительно ставит меня в тупик.

Ответы [ 3 ]

5 голосов
/ 23 августа 2009

Простой дамп потока из тестовой программы показывает следующие потоки: один - поток приложения, а затем у вас есть 8 других потоков JVM:

Full thread dump Java HotSpot(TM) Client VM (14.0-b16 mixed mode):

"Low Memory Detector" daemon prio=6 tid=0x0aad6c00 nid=0x9c0 runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread0" daemon prio=10 tid=0x0aad0c00 nid=0x6d4 waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

"Attach Listener" daemon prio=10 tid=0x0aacb400 nid=0xda4 runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x0aaca000 nid=0xcc8 waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=8 tid=0x0aab7400 nid=0xba0 in Object.wait() [0x0ac2f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x029a0b18> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x029a0b18> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

"Reference Handler" daemon prio=10 tid=0x0aab2c00 nid=0x418 in Object.wait() [0x0abdf000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x029a0a20> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:485)
        at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
        - locked <0x029a0a20> (a java.lang.ref.Reference$Lock)

"main" prio=6 tid=0x002b6400 nid=0x3d8 runnable [0x0090f000]
   java.lang.Thread.State: RUNNABLE
        at TestClass.main(TestClass.java:8)

"VM Thread" prio=10 tid=0x0aaafc00 nid=0x184 runnable

"VM Periodic Task Thread" prio=10 tid=0x0aad9000 nid=0xc7c waiting on condition

Хотя YMMV, поскольку эти результаты сильно зависят от используемой вами JVM.

0 голосов
/ 23 августа 2009

jvisualvm - отличный инструмент для проверки JVM во время выполнения. Он расскажет вам много всего интересного.

0 голосов
/ 23 августа 2009

Итак, я не собираюсь давать вам ответ. Однако подумайте об этом: Java является интерпретируемым языком. Он сам запускает виртуальную машину (JVM). Это должно быть запущено для запуска вашего приложения (потока). Поэтому подумайте обо всех потоках в JVM, а не только о потоках для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...