Est-il possible pour un thread de Blocage lui-même?

Est-il techniquement possible pour un thread en Java à l'impasse de lui-même?

M'a demandé lors d'une interview d'un moment de retour et a répondu qu'il n'était pas possible, mais l'enquêteur m'a dit qu'il est. Malheureusement je n'ai pas pu obtenir de sa méthode sur la façon d'atteindre cette impasse.

Cela m'a fait réfléchir et la seule situation que je peux penser est l'endroit où vous pouvez avoir de ce lieu est l'endroit où vous avez un RMI processus serveur qui contient une méthode qui s'appelle elle-même. La ligne de code qui appelle la méthode est placé dans un bloc synchronisé.

Si, c'est possible ou a été l'interviewer incorrect?

Le code source je pensais à l'est le long de ces lignes (où testDeadlock est en cours d'exécution dans un RMI processus de serveur)

public boolean testDeadlock () throws RemoteException {
    synchronized (this) {
        //Call testDeadlock via RMI loopback            
    }
}
  • Synchronisé appels RMI de cette méthode permettrait seulement de mettre en file d'attente le RMI expédition threads sur le moniteur de ce RemoteObject sur le côté serveur.
  • Le but de ce genre de chasse aux sorcières des questions d'entrevue m'échappe. Il rend l'ensemble du processus apparente davantage à un jeu de montrer que pour une entrevue. Je suis sûr que l'intervieweur croit qu'il a découvert quelques valeurs aberrantes et pensé qu'il serait un grand tour de la question. Mais quel est le point? Je suis curieux de voir ce que le reste de l'interview a été comme? J'ai tendance à couvrir mes réponses à des questions comme celle-ci par discuter les concepts impliqués plus que de donner un caractère définitif. Ce qui va à l'encontre de mon naturellement objectif de la disposition, mais dans ces situations, il semble approprié.
  • Je me demande si le journaliste avait quelque chose comme une pthreads non-récursive mutex dans l'esprit. À partir de la pthreads de la documentation: "normal mutex ne peut pas être verrouillé à plusieurs reprises par le propriétaire. Les tentatives par un fil à relock déjà tenu mutex, [...] suite à une situation de blocage." IIRC Java les mutex sont un peu plus intelligents que cela.
  • Peut-être la meilleure réponse aurait été "Pas si vous M'avez eu à écrire le code!"
  • Je ne le pense pas. Un thread peut juste faire une chose à la fois. il ne peut donc pas faire un peu de travail et aussi attendre autre chose de complet
  • Je ne pense pas, n'ai pas entendu parler de blocages en mono-thread applications ..
  • Un RMI de bouclage qui allait se passer dans un thread séparé. Ce n'est pas une instance d'un fil de blocage lui-même. Je suis entièrement d'accord avec @Sorax. Certains enquêteurs ne peuvent pas aider à montrer. La question n'est pas pertinente pour n'importe quelle situation en matière de développement que j'ai jamais rencontrés, ou à tout iphring décision. Si l'intervieweur est si bien informé qu'il doit avoir un intérêt dans l'éducation de ses employés comme nécessaire, et aussi dans le débat sur ce genre de choses de manière rationnelle plutôt que de les déposer en tant que les conditions d'entrée.
  • J'ai accidentellement réussi à blocage du fil... Il attend son propre objet de verrouillage pour libérer l'objet qu'il veut (et non, je n'ai pas incorporer des objets verrous). Ou au moins, c'est comment le débogueur Eclipse montre. Edit: Ce n'est vraiment pas, je ne l'ai pas vérifier correctement l'attente des Id de thread.

InformationsquelleAutor Pram | 2010-08-16