2013-05-02 5 views
3

В одном из интервью я наткнулся на запрос по темам. Вопрос находится в приведенном ниже фрагменте кода, сколько потоков создается? Я знаю, что это очень простой запрос. Но я не мог найти ответ с доказательством.Сколько потоков создается?

Может ли кто-нибудь дать мне ответ на концепцию (любые ссылки)? Спасибо в ожидании.

class MainApp { 
    public static void main(String[] args) { 
     System.out.println("Welcome to Java"); 
    } 
} 
+3

'System.out.println (Thread.activeCount());' или 'Thread.getAllStackTraces()' – NINCOMPOOP

ответ

12

Поскольку ваша простая программа не создает потоки явно, здесь создается только один прикладной поток. Это «правильный» короткий ответ на интервью.

Однако вы можете продолжить и сказать, что JVM создает другие потоки, необходимые для себя. Например, сборщик мусора (GC). Количество потоков GC зависит от конфигурации. По умолчанию 1.

+0

Большое спасибо @Alex. – user1635014

6

Если вопрос буквально:

В приведенном ниже фрагменте кода, сколько потоков создаются?

... тогда ответ . Фрагмент кода не создает любые темы сами по себе. Конечно, поток создается для этого кода для запуска, и поскольку этот код больше не создается, другим разумным ответом будет 1. Но если вы говорите о том, сколько потоков использует VM, тогда (обычно) должно быть не менее двух (для GC), в большинстве случаев больше (диспетчер, ссылочный обработчик, финализатор и т. д.), но полностью зависит от конфигурации. Даже тогда, это не всегда будет два, вы можете иметь совершенно конформный JVM, что не делает сбор мусора на всех (и действительно рано JavaCard В.М. сделал именно это.)

Конечно, это предполагает что интервьюер спрашивал о Java-потоках - если мы переходим на уровень ОС, то снова у нас есть еще один уровень неизвестности относительно того, как система печатает вышеприведенную строку, если вообще!

Учитывая вышеизложенное, мой ответ должен был уточнить, что именно имел в виду интервьюер по этому вопросу, потому что сам по себе это немного двусмысленно и не является большим вопросом на мой взгляд. Он читается как трюк, но без достаточной информации, чтобы ответить на него правильно - какой бы ответ вы ни дали, без дальнейших разъяснений, можно было бы считать неправильным. Хотя, как уже отмечал NoobUnchained, упоминание о том, что вы можете использовать Thread.activeCount(), чтобы захватить количество используемых потоков VM, не идет против вас.

Конечно, возможно, цель вопроса заключалась не столько в техническом ответе, сколько в том, чтобы выяснить, что именно подразумевалось под его интервью - не такая неслыханная тактика!

0

Правильный ответ: «Я не знаю» я получил эти темы, созданные:

Signal Dispatcher 
main 
Finalizer 
Reference Handler 
Monitor Ctrl-Break 

Это может зависеть от JVM и его конфигурации.

+2

@JunaidHassan Учитывая отсутствие информации в вопросе, «я не знаю», на самом деле, возможно, самый точный ответ, который вы можете дать. – berry120

+1

@JunaidHassan Почему бы и нет? Каков правильный ответ, когда вы не можете ответить? – NeplatnyUdaj

2

Когда программа запущена, есть потоки, которые мы создаем, которые запущены.В вашем случае это простая программа, затем есть основная статья , которая выполнила основной метод . Также может быть несколько нитей daemon, которыми управляет JVM (т. Е. Сборщик мусора и многое другое).

0

Все зависит от того, какую нить вы пытаетесь подсчитать. Существует два типа потоков, создаваемых JVM - это поток уровня приложения, а другие - потоки уровня системы.

Так по крайней мере один поток создается, который является главной нитью и многие системные темы, такие, как для управления памятью (Garbage Collection) и т.д.

Если вы берете свой код, например только уровень резьбы 1 приложения создается что основной поток. И сам код не создает дополнительные потоки.

Так точный ответ будет один уровень поток приложения (Основной поток) и много потоков на уровне системы

Читайте ниже Ссылка скопирована из Java Документация:

http://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html

многопоточного выполнения является важной особенностью платформы Java. Каждое приложение имеет хотя бы один поток - или несколько, если вы считаете «системные» потоки, которые выполняют такие функции, как управление памятью и обработка сигналов. Но с точки зрения программиста приложения вы начинаете с одного потока, называемого основным потоком. Этот поток имеет возможность создавать дополнительные потоки, как мы продемонстрируем в следующем разделе.

Смежные вопросы