:: Enseignements :: Master :: M1 :: 2012-2013 :: Java Avancé ::
[LOGO]

Thread, Section critique, Interblocage


Exercice 1 - Modification de plusieurs variables en concurrence

On souhaite créer deux threads qui changent les coordonnées d'un même point:

  1. Vérifier en utilisant grep que le code affiche des points (0,1) ou (1,0).
    Expliquer pourquoi.
  2. Créer des sections critiques en utilisant un bloc synchronized là où il faut pour que seuls des points (0,0) et (1,1) puisse être affichés.
  3. Expliquer pourquoi il n'est pas conseillé de synchroniser sur this et modifier votre code en conséquence.
  4. Pourquoi les champs x et y n'ont-ils pas besoin d'être déclarés volatile ?

Exercice 2 - Des verrous pour les critiques

  1. Expliquer dans quels cas il est préférable d'utiliser un lock ou un bloc synchronized.
  2. Créer une classe LockedPoint ayant la même sémantique de la classe Point de l'exercice précédent mais en utilisant un verrou de la classe java.util.concurrent.locks.ReentrantLock

Exercice 3 - Verrous permissifs

On souhaite mettre en place un système de type cache; une donnée lue fréquemment est mise-à-jours périodiquement. Prenons le cas d'une webcam. On considère que la webcam capture une image toutes les 10 secondes et stocke une image webcam_<num>.jpg. num correspond à la version de l'image.


Exercice 4 - J'comprend pas, ça devrait marcher

Voici une version simplifiée d'un code fourni par un étudiant:

Exercice 5 - Java c'est trop dur, je veux faire de la broderie

Où se situe l'interblocage dans le code ci-dessous (indice : un verrou est caché) :