J'ai une question qui peut sembler très basique mais la voici. Comme on le sait couramment dans Java, le mot-clé synchronize
est utilisé pour gérer plusieurs threads accédant à une instance particulière. Maintenant, imaginez si une instance A a une méthode synchronisée do()
. Cela signifie-t-il que si un thread T1 exécute la méthode do()
et acquiert donc le verrou de A, aucun autre thread n'accèdera à l'instance A tant que T1 n'aura pas libéré le verrou (même si les autres méthodes ne sont pas synchronisées)? ou cela signifie que toutes les méthodes non synchronisées (ou blocs de code) sont accessibles à l'exception de la méthode do()
qui peut être exécutée par un seul thread à la fois?Que fait exactement "synchroniser"?
Répondre
Si T1 obtient un verrou sur la méthode do()
, c'est que le procédé est sous bloc synchronisé. et une autre partie du programme disent que la méthode display()
n'est pas synchronisée alors d'autres threads peuvent accéder à cette méthode. Donc votre ou est correct.
Une méthode synchronisée garantit que cette méthode n'est pas appelée pour plusieurs instances d'objet simultanément et également pendant l'exécution d'une méthode synchronisée toutes les variables d'instance associées sont actualisées avant de commencer l'exécution de la méthode.
droite de la Java documentation:
Il est impossible pour deux appels de méthodes synchronisées sur le même objet à entrelacer. Lorsqu'un thread exécute une méthode synchronisée pour un objet, tous les autres threads qui invoquent des méthodes synchronisées pour le même bloc d'objet (suspendent l'exécution) jusqu'à ce que le premier thread soit fait avec l'objet.
Par conséquent, votre dernière explication est correcte.
- 1. Que fait exactement @synthesize?
- 2. Que fait exactement ListSelectionModel.insertIndexInterval()?
- 3. Que fait exactement pg_escape_string?
- 4. Que fait exactement FillMode?
- 5. Que fait KeyListener exactement?
- 6. Que fait #! Perl exactement?
- 7. Que fait exactement MIBCC.EXE?
- 8. Que fait exactement rangeOfCharacterFromSet?
- 9. Que fait exactement pygame.display.set_mode()?
- 10. Que fait exactement Panel.IsItemsHost?
- 11. Que fait exactement reloadData?
- 12. Que fait exactement visibleContentsAsDataURL?
- 13. Que fait exactement launch4j?
- 14. WCF: Que fait exactement IsInitiating?
- 15. Que fait + = exactement en python?
- 16. Que fait exactement -march = natif?
- 17. que fait exactement 'get_page_by_path' wordpress?
- 18. Que fait exactement! Function ($) {...} (window.jQuery)?
- 19. Que fait exactement => signifie?
- 20. Que fait exactement "#" en C?
- 21. Que fait exactement l'instruction BEQ?
- 22. Que fait exactement l'utilitaire "ar"?
- 23. Que fait exactement System.Diagnostics.Process UseShellExecute?
- 24. Que fait exactement "printw"? (Ncurses)
- 25. que fait exactement Data-anchor-target?
- 26. Que fait exactement getch() dans C?
- 27. Sphinx: que fait exactement indexer --merge?
- 28. Que fait exactement getinstance() dans un singleton?
- 29. Que fait exactement removedOnCompletion = NO faire?
- 30. Que fait exactement le format décimal?
Je ne vois pas de bonnes réponses ici. La question plus ancienne que quelqu'un a lié à a une bonne réponse à _why_ et _when_ à utiliser «synchronized», mais pas de réponse concise à ce qu'il fait réellement. La réponse est simple: la JVM ne permettra pas à deux threads de se synchroniser sur le même objet en même temps. C'est tout ce qu'on peut en dire. Souvenez-vous qu'une méthode d'instance synchronisée se synchronise sur 'this', et qu'une méthode statique synchronisée se synchronise sur l'objet de classe, et c'est tout ce que vous devez savoir sur ce que' synchronized' fait réellement _does_. –