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.

23
demandé sur Joachim Sauer 2011-03-11 09:05:24

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.

18
répondu sbridges 2011-03-11 15:55:10

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.

4
répondu bestsss 2011-03-11 06:45:42

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.

-1
répondu Ankush Gatfane 2015-12-08 12:45:52