2010-09-21 2 views
-1

Qu'est-ce que la synchronisation de thread dans Java? donnez n'importe quel exemple dessus en détailQu'est-ce que la synchronisation de thread dans Java?

+1

Recherche sur Google et vous trouverez beaucoup de bons exemples. –

+2

Cela ressemble à des devoirs. S'il vous plaît découvrez les bases par vous-même et ensuite poser quelques questions plus spécifiques à ce sujet ici. – tangens

+0

Je ne réponds généralement pas aux questions de devoirs en détail. Mais une réponse copiée/collée à partir d'ici est aussi bonne qu'une copie copiée/collée depuis n'importe quel autre site web. Ce n'est pas comme s'il y avait une question de programmation ici. –

Répondre

3

Jetez un oeil à la java tutorial sur la synchronisation.

+0

Veuillez également lire Concurrency in pratice par Doug Lea. –

1

Dans les programmes multithread, il existe souvent des sections du programme qui doivent être exécutées de manière atomique (comme s'il s'agissait d'une seule opération). Ceux-ci sont généralement appelés régions critiques et sont protégés en utilisant des paradigmes d'exclusion mutuelle (mutex). Le mot-clé synchronized dans Java est une telle façon de fournir une exclusion mutuelle.

Tenir compte du code:

synchronized(lockObject) { 
    //critical code 
} 

Dans le code ci-dessus, un seul thread peut entrer dans ce bloc synchronisé à un moment aussi longtemps que ne change jamais la référence d'objet par la lockObject variable. Cela garantit que le code exécuté dans le bloc synchronisé n'est jamais exécuté que par un seul thread.

Des exemples courants d'où le verrouillage est nécessaire seraient lors de l'itération sur une collection. Peu d'implémentations de Java Collection offrent une itération sûre des threads. Une méthode de base pour créer une itération thread-safe serait de protéger chaque accès à la collection avec un bloc synchronisé sur cette collection.

Par exemple:

synchronized(myCollection) { 
    myCollection.add(item); 
} 

synchronized(myCollection) { 
    myCollection.remove(item); 
} 

synchronized(myCollection) { 
    for(Object item:myCollection){ 
    System.out.println(item); 
    } 
} 
Questions connexes