Académique Documents
Professionnel Documents
Culture Documents
Programmation Réseau
So kets & Threads
Chakir LOQMAN
02/06/2021
1 Introdu tion
2 Thread en Java
3 Serveur multithreadé
Rle
Le prin ipal avantage des threads
est de pouvoir répartir diérents
traitements d'un même
programme en plusieurs unités
distin tes pour permettre leurs
exé utions "simultanées".
Le on ept de thread permet de
séparer l'exé ution d'un
programme en plusieurs pro essus
légers. Cha un s'exé ute en
parallèle dans le même espa e
d'adressage de façon on urrente.
Chakir LOQMAN FSDM Fès
Introdu tion
Thread en Java
Serveur multithreadé
Nouveau thread
Méthode 1
Première manière de réer un nouveau thread : étendre la lasse Thread
Le ode à exé uter doit être implémenté dans la méthode publi void
run() (héritée : sur harge)
La méthode start() héritée de la lasse démarre le thread
Exemple
Classe Cal ulFa toriel al ule un fa toriel et a he le résultat à l'é ran
Méthode 2
Deuxième manière de réer un nouveau thread : réer un objet qui
implémente l'interfa e Runnable
Le ode à exé uter doit être implémenté dans la méthode publi void
run() (obligatoire)
On passe l'objet en paramètre du onstru teur d'un thread
Exemple
publi stati v o i d main ( String [℄ args ){
Test1 p=new Test1 ();
Thread t=new Thread (p );
System . out . println (" groupe :"+t. getThreadGroup(). getName ());
t. start ();
}
Chakir LOQMAN FSDM Fès
Introdu tion
Thread en Java
Serveur multithreadé
Groupes de threads
Dénition
La seule solution pour ajouter un Thread dans un groupe parti ulier est
d'utiliser une des sur harges du onstru teur de la lasse Thread qui
attend en paramètre un objet de type ThreadGroup.
Exemple
publi l a s s Test1 implements Runnable {
Override
p u b l i v o i d run (){
System . out. println (" Bonjour SMI6 " );
}}
Exemple
publi stati v o i d main ( String [℄ args ){
Test1 p=new Test1 ();
ThreadGroup monThreadGroup = new ThreadGroup(" Mon groupe de threads " );
Thread t = new Thread ( monThreadGroup , p );
System . out . println (" groupe :"+ t. getThreadGroup(). getName ());
t. start ();
}
Chakir LOQMAN FSDM Fès
Introdu tion
Thread en Java
Serveur multithreadé
Exer i e 1
Exer i e 1
E rire un programme ave deux threads, qui orrespondent ha un à un
ompteur. L'un des ompteurs in rémentera une valeur initiale (init) d'un
in rément (in ) positif, et e pour un nombre d'itérations donné (Nit). Ce
thread sera interrompu de x temps entre haque deux itérations. Pareil
pour le deuxième ompteur, mais ave un in rément (in ) négatif. Le temps
d'interruption ne sera pas le même pour les deux threads. Commenter le
résultat obtenu.
Solution
publi l a s s Test {
publi stati v o i d main ( String [℄ args ) {
new Compteur (0 ,1 ,30 ,10).start ();
new Compteur (0 , -1 ,100 ,10).start ();
} }
Chakir LOQMAN FSDM Fès
Introdu tion
Thread en Java
Serveur multithreadé
Serveur multithreadé
Serveur multithreadé
// le servi e
l a s s Servi e implements Runnable {
p r i v a t e So ket maSo ket ;
Servi e ( So ket s) {
maSo ket = s;
}
v o i d run () {
!
// bla bla bla bla ?
!
maSo ket . lose ();
}
}
ServerSo ket
// squelette de serveur
ServerSo ket so ketAttente;
so ketAttente = new ServerSo ket( PORT );
do {
// établissement d ' une onnexion
So ket s = so ketAttente. a ept ();
} w h i l e ( t r u e );
so ketAttente. lose ();
FIN