Почему isAlive () метод Thread объявлен как нативный?

1

Почему isAlive() был объявлен native в Thread.java? Какой класс это реализует? Я знаю, что собственные методы реализованы вне Java. Класс, который реализует это, загружается загрузкой соответствующей библиотеки. Но мне любопытно узнать, какой класс реализует isAlive()? И почему он объявлен родным?

  • 0
    Потоки являются частью операционных систем и в действительности реализуются операционной системой (при условии, что у вас есть собственные потоки). Таким образом, когда вы хотите получить доступ к этому базовому ресурсу, необходимо сделать собственный вызов.
  • 2
    Я бы сказал, потому что JVM не реализует свой собственный планировщик и использует собственные потоки ОС. Таким образом, этот метод является просто оболочкой для системного вызова ядра ОС.
Показать ещё 4 комментария
Теги:
multithreading

1 ответ

3
Лучший ответ

Почему метод isAlive() был объявлен native в Thread.java?

Возможно, потому что он должен быть реализован в собственном коде. Возможно потому, что он может быть проще реализован в собственном коде. Возможно, по историческим причинам; т.е. было объявлено, что оно было native давным-давно, и оно было оставлено таким образом, чтобы свести к минимуму потенциальное нарушение, вызванное его "фиксацией".

Вы можете получить больше информации, посмотрев исходный код C++ для собственных методов кода для Thread, на всех платформах. Но, очевидно, исходный код исторических реализаций недоступен.

Какой класс это реализует?

Никто. Это native.

Я знаю, что собственные методы реализованы вне Java. Класс, который реализует это, загружается загрузкой соответствующей библиотеки.

Очевидно, что это не класс Java...

Но на самом деле библиотека, вероятно, связана с основным исполняемым файлом java а не с динамической загрузкой.

Но мне любопытно узнать, какой класс реализует метод isAlive()?

Эммм... ты говоришь о классе C++? Это зависит от платформы. Многие из родных классов имеют разные версии в базе кода для Windows, Linux и Solaris (и, возможно, Mac сейчас, я думаю).

Если вам действительно интересно, я предлагаю вам проверить код из репозитория OpenJDK Mercurial или загрузить исходные пакеты и выполнить поиск. К сожалению, проект OpenJDK не обеспечивает удобный удобный веб-браузер исходного кода для репозитория. (Так что, даже если бы я нашел его для вас, я не смог бы дать вам стабильную ссылку на него.)

И почему он объявлен родным?

Вы повторяетесь. (Но Java-классы не объявлены native. Java-методы...)

  • 0
    Да, я говорил о классе C ++ или о любой программе, которая обеспечивает его реализацию. Но все равно спасибо за хорошее завершение.
  • 1
    @ParagJ: скачать исходный код openjdk и проверить его
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню