Академический Документы
Профессиональный Документы
Культура Документы
Plan
!
Sommaire
!
Sources :
! ! !
JAVA in a Nutshell, OReilly Au cur de Java (tomes 1 & 2) Site officiel www.sun.com !
Principe
!
Thread=processus lger
! ! !
processus = multiples flux d'excutions lger = partage d'un mme espace mmoire d'une application (les donnes sont partages) application est dite multithreade thread=instance d'une sous-classe de Thread Implantation obligatoire de la mthode run() contrle du thread avec les mthodes start(), sleep(), join(), getPriority(),setPriority()
Les threads
public class MonThread extends Thread { public void run() { // code excuter en parallle } }
3 4
Interface Runnable
!
classe implantant l'interface Runnable et possdant une mthode run() Cration d'un thread qui appelle la mthode run() de l'objet fourni en paramtre Partage des donnes facile !
} public static void main(String String[] args) { String UneClasse un_objet=new UneClasse(); UneClasse Thread t=new Thread(un_objet); Thread t.start(); /* La mthode run de un_objet est lance en parallle, on peut continuer d'utiliser un_objet pendant ce temps */ }
5
La synchronisation
!
Programmation parallle ! protection des variables utiliss par les threads ! section critique=1 seul thread peut lire/crire sur l'objet ! verrou sur un objet pour empcher les accs concurrents En Java, utilisation de synchronized
public class UneClasse implements Runnable { public synchronized void uneMethodeAProteger() { // Lorsqu'un thread excute cette mthode, l'objet ne // peut pas tre utilis par d'autres threads } }
wait() : met le thread excutant l'objet en attente notify(): rveille l'un des threads mis auparavant en attente notifyall() : rveille tous les threads mis en attente on ne choisit pas le thread qui est rveill
"
Faible contrle
! !
tat de famine possible ! Sinon, son effet est ignor Diffrent des smaphores
Normal, a n'existe pas directement Il faut utiliser les routines d'entres/sorties de Java
Pour lire dans un fichier ou dialoguer sur une socket, c'est peu prs le mme problme...
10
{In|Out}putStream
! !
Entre
FileInputStream
FilterInputStream
contrle bas niveau : void close() mthodes entre : int read(), int read(Byte[]) mthodes sortie : void write(int), void write(Byte[]) Pour la lecture/criture de fichiers Flux de donnes bufferis (sinon, lecture octet par octet) Bti partir d'un autre flux non bufferis Bti partir d'un autre flux Routines volues pour l'change de donnes {read|write}Float, {read|write}Int, {read|write}UTF
!
BufferedInputStream DataInputStream
File{In|Out}putStream
!
!
OutputStream
Buffered{In|Out}putStream
! !
!
FileOutputStream FilterOutputStream
Data{In|Out}putStream
! !
Sortie
BufferedOutputStream DataOutputStream
11
metteur
"
constituer un datagramme envoyer sur un port donn vrification de rception du datagramme sur le port
destinataire
"
client
" "
connexion sur le serveur envoi d'une requte sur un port serveur donn en attente sur un port lancement d'un thread traitant la requte reue
serveur
" "
Classe Java InetAddress pour les adresses IPv4 Rsolution de nom (fichier host, dns, etc.)
14
13
InetAddress loc=InetAddress InetAddress.getLocalHost(); InetAddress ServerSocket listen_socket=new ServerSocket(port,10,loc); ServerSocket // Boucle infinie d'interception des requtes de connexion for(;;) { Socket socket=listen_socket.accept(); Thread thread=new TraitementRequete(socket); TraitementRequete thread.start(); } } catch(Exception Exception e) { System.err.println("Erreur: " + e); System } }
17 18
Note: Il peut tre utile de transformer fluxEntree et fluxSortie en Data{In|Out}putStream C'est vous qui voyez...