Lorsqu'il verrouille une méthode ou un bloc de code, au plus un thread peut exécuter ce code en même temps. Lorsque deux threads simultanés accèdent à ce bloc de code de synchronisation verrouillé dans le même objet, un seul thread peut être exécuté à la fois. Un autre thread doit attendre que le thread actuel ait fini d'exécuter ce bloc de code avant de pouvoir exécuter ce bloc de code.
La question est alors : si deux threads accèdent à des instances différentes de cet objet, seront-ils toujours bloqués ?
synchronisé peut être utilisé des trois manières suivantes
Spécifiez l'objet à verrouiller. Similaire à synchronisé (instance) {}.
Agit directement sur les méthodes d'instance. Cela équivaut à verrouiller l'instance actuelle. Avant d'entrer dans la méthode de synchronisation, vous devez obtenir le verrou de l'instance actuelle.
Agit directement sur les méthodes statiques. Cela équivaut à verrouiller la classe actuelle et à obtenir le verrou de la classe actuelle avant d'entrer dans la méthode de synchronisation.
Pour les 1 et 2 ci-dessus. Le thread doit être bloqué uniquement s'il s'agit du même objet ou de la même instance.
Des verrous sont ajoutés aux instances d'objet. Les verrous ajoutés à différents objets ne s'affecteront pas les uns les autres. Deux threads accédant à deux objets différents ne se bloqueront pas.