Mutex permet de créer une exclusion mutuelle. La méthode lock, va laisser passer le premier processus, mais bloqué tous les autres jusqu'à ce que le premier processus appel la méthode unlock.
Comme on le voit dans la description, il faut s'assurer que si un process appel un lock, un unlock sera appelé, sinon, il va y avoir des blocages.
Je vous recommende d'utiliser le mutex ainsi : Celà assure que si une exception ou une erreur arrive, que le unlock soit appelé quoiqu'il arrive. Pour aidé à cherché ou un blocage se produit, ou si il peut en subvenir un, il est possible d'activer les message de débogage du mutex. Il vous diront quel processus prend le mutex (et où dans le code) et quel processus le libère (et où dans le code). Un avertissement est affiché si un thread libére un mutex fermé par un autre thread.

MessageHandler gère des file de messages. Il a été conçu pour être "thread-safe". C'est à dire que si deux messages arrivent en me temps, l'un des deux est traité complétement, puis ensuite l'autre message est traité. Autrement dit, les messages sont mis en attente pour être traité un par un, pas de traitement des messages en paralléle.
Les messages peuvent être programmé dans le temps, pour dire déclenche cette opération dans tant de millisecondes.
Ce mécanisme est utile par exemple pour la gestion d'un "timeout". Exemple :
ThreadManager gére un nombre limité de ThreadedTask en parallèle, suffisament pour avoir plusieurs taches en même temps, mais pas trop pour ne pas saturé la JVM. Si le nombre de taches dépasse le maximum, les taches supplémentaire sont mis en attente que l'une des autres taches se termine.
Il est également possible de déclenché une tache plus tard dans un nombre de millisecondes donné. On peut aussi répéter une tache plusieurs fois (Jusqu'à ce qu'elle soit annulée).
Une tache, sous sa forme complète, possède, un paramètre, un résultat et une information de progression. Pour que la progression fonctionne, vous devez, au sein de la tache, posté des informations de progression, elles seront traitées dans un processus à part, ce qui permet de continuer la tache sans la ralentir pour affiché un pourcentage à l'écran par exemple. Il existe des formes plus simple des taches : ThreadedSimpleTask et ThreadedVerySimpleTask
Important ! Si vous utilisez le thread manager au moins une fois n'oubliez pas de le détruire proprement, au moins à la fin de votre application. Cela assure que tous les threads s'arrêtent proprement.