Java Threads vs Pthreads
On m'a posé cette question dans une interview aujourd'hui.
" Lorsque nous créons un thread avec pthread_create()
(threads POSIX), le thread commence seul. Pourquoi avons-nous besoin d'appeler explicitement start()
en Java. Quelle est la raison pour laquelle Java ne démarre pas le thread lorsque nous en créons une instance."
J'étais vide et l'intervieweur était à court de temps et finalement il ne pouvait pas m'expliquer la raison.
3 réponses
En Java, ne pas démarrer le thread tout de suite conduit à une meilleure API. Vous pouvez définir des propriétés sur le thread (démon, priorité) sans avoir à définir toutes les propriétés dans le constructeur.
Si le thread a commencé tout de suite, il aurait besoin d'un constructeur,
public Thread(Runnable target, String name, ThreadGroup threadGroup, int priority, boolean daemon, ContextClassLoader contextClassLoader, long stackSize)
Pour permettre de définir tous ces paramètres avant le démarrage du thread. La propriété daemon ne peut pas être définie après le démarrage du thread.
Je suppose que L'API POSIX prend une structure avec tout le thread propriétés dans l'appel à pthread_create()
, Il est donc logique de démarrer le thread tout de suite.
Les raisons sont nombreuses. Mais je vous en donne quelques-uns:
- le thread, lui-même, peut commencer à s'exécuter avant de renvoyer l'instance.
- le classloader de contexte doit être défini correctement avant d'exécuter le thread (regardez le point précédent)
- une configuration supplémentaire comme la priorité doit être définie avant de démarrer le thread
- pthreads utilise un pointeur vers la initialisée structure(s), depuis la java.lang.Le Thread ne peut pas être correctement initialisé à la fin du c-tor, voir points ci-dessus; appel direct au natif
pthread_create
pour exécuter réellement le code n'a aucun sens
J'espère que vous avez eu l'idée.
Ce que je ressens, Java permet à OS de planifier(exécuter) le Thread, et ne permet pas à l'utilisateur de le faire, car OS est mieux conscient de l'environnement d'exécution et de la planification.