Как Sun JVM сопоставляет потоки Java с потоками Windows?

В моем приложении используется множество потоков Java. Я ищу надежное понимание того, как JVM (версии 5 и 6) сопоставляет потоки Java с базовыми потоками Windows. Я знаю, что есть документ для сопоставления с потоками Solaris, но не с Windows.

Почему Sun не публикует эту информацию?

Я хочу знать, есть ли сопоставление 1: 1 или оно зависит от JVM, параметра -server, рабочей нагрузки и т. Д. И т. Д.

Я знаю, что меня это не «должно» заботить, я должен правильно писать синхронизирующий код, но я наследую большой объем кода...

Кроме того, кто-нибудь знает, как давать имена потокам Windows?


person David Kerr    schedule 03.11.2008    source источник
comment
Я был бы удивлен, если бы он делал что-то более продвинутое, чем планирование 1:1.   -  person JesperE    schedule 03.11.2008


Ответы (4)


У меня нет документа для вас, но из столбца «Потоки» в диспетчере задач вы можете довольно надежно догадаться, что он отображает 1: 1 на собственные потоки (сначала вам нужно включить столбец «Потоки» в диспетчере задач).

Да, чуть не забыл, вы можете скачать jdk src здесь и посмотреть сами.

person TheMarko    schedule 03.11.2008

Сопоставление зависит от платформы, однако я нашел интересный сравнение между потоками платформы для виртуальной машины (хотя, вероятно, немного устарело). Суть в том, что вам не нужно знать. Что вас, вероятно, больше интересует, так это узнать о зеленых темах (если вы еще не знаете ).

Что касается вопроса об именах: разве конструктор позволяет вам назвать поток? Или вы имеете в виду назвать их и просмотреть их имя в каком-то браузере потоков Windows?

person Miguel Ping    schedule 03.11.2008

Как назвать поток Win32

К сожалению, кажется, что это невозможно или, по крайней мере, очень сложно сделать внутри Windows JVM.

person MSalters    schedule 03.11.2008
comment
Вы всегда можете обернуть JNI вокруг этого кода, если захотите его использовать. - person James Van Huis; 03.11.2008
comment
Вам может быть трудно найти идентификатор потока Windows - он не будет соответствовать идентификатору потока, возвращаемому JVM. Но мне кажется, что это то, что вам действительно не нужно делать на Java в первую очередь. - person matt b; 03.11.2008
comment
Недавно я имел дело с кодом JNI, который создает Win32 AccessTokens, и может случиться так, что эти токены работают только в потоке ОС, где они были созданы... хотя не уверен... - person David Leonard; 13.05.2010

Спецификация JVM ничего строго не говорит по этому поводу. Разработчикам JVM осталось сопоставить рекламу Java с рекламой платформы (Windows, Linux и т. д.). Также трудно поверить, что между потоками Java и потоками ОС будет взаимно однозначное соответствие.

person rai.skumar    schedule 17.10.2012