В Linux потоки Java реализованы с помощью собственных потоков, поэтому программа Java, использующая потоки, ничем не отличается от собственной программы, использующей потоки. «Java-поток» - это просто поток, принадлежащий процессу JVM.
В современной системе Linux (использующей NPTL) все потоки, относящиеся к процессу, имеют одинаковый идентификатор процесса и идентификатор родительского процесса, но разные идентификаторы потоков. Вы можете увидеть эти идентификаторы, запустив ps -eLf
. Столбец PID - это идентификатор процесса, столбец PPID - это идентификатор родительского процесса, а столбец LWP - это идентификатор потока (LightWeight Process). «Основной» поток имеет идентификатор потока, который совпадает с идентификатором процесса, а дополнительные потоки будут иметь разные значения идентификатора потока.
Старые системы Linux могут использовать реализацию потоковой реализации «linuxthreads», которая не является полностью совместимой с POSIX, а не NPTL. В системе linuxthreads потоки имеют разные идентификаторы процессов.
Вы можете проверить, использует ли ваша система NPTL или linuxthreads, запустив библиотеку C (libc) в качестве автономной программы и посмотрев в разделе «Доступные расширения» на своем выходе. Он должен упомянуть либо «Native POSIX Threads Library», либо linuxthreads. Путь к библиотеке C варьируется от системы к системе: это может быть /lib/libc.so.6
, /lib64/libc.so.6
(в 64-разрядных системах на базе RedHat) или что-то вроде /lib/x86_64-linux-gnu/libc.so.6
(на современных системах на базе Debian, таких как Ubuntu).
На уровне ОС у theads нет имен; они существуют только в рамках JVM.
Функция pthread_kill()
C может использоваться для отправки сигнала в конкретный поток, который вы могли бы использовать, чтобы попытаться убить этот конкретный поток вне JVM, но я не знаю, как JVM ответит на него. Это может просто убить всю JVM.
Stephen C, я изучаю, как имена потоков Linux и именования Java связаны между собой. А также, как управление потоками JVM-потоков управляется в Linux. – karthi