Rechercher : dans
Par :

[java] synchronized

Dernière réponse le 18 nov 2008 à 18:18:20 karine, le 13 jun 2005 à 11:01:20 
 Signaler ce message aux modérateurs

Bonjour,

j'ai une méthode, et j'ai des threads clients qui executent cette methode.
Je voudrais qu'il n'y ait qu'un seul client à la fois qui execute cette methode.

J'ai essayé avec synchronized, mais ça n'a pas l'air de marcher. Je vous passe le code :

public synchronized traitement() {
System.out.println(tmp);
System.out.println(referer);
System.out.println(ID);
}


Moi je voudrai avoir à l'affichege tmp + referer + ID de chaque client, dans cet ordre.


Mais j'ai des trucs du genre
Referer
Referer
ID
ID
ID
ID


Malgré le synchronized, tout est imbriqué.

Comment je peux faire ?
Merci

Meilleures réponses pour « [java] synchronized » dans :
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Télécharger SyncBack VoirSyncBack est un logiciel de synchronisation de répertoires. Il peut être utilisé: pour effectuer des backups de fichiers (copies de sauvegarde) pour synchroniser des répertoires entre ordinateurs. pour synchroniser des clés USB ou disques...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...
J2EE - Java 2 Enterprise Edition VoirIntroduction au Java Framework Le «Java Framework» (Java 2 Platform) est composé de trois éditions, destinées à des usages différents : J2ME : Java 2 Micro Edition est prévu pour le développement d'applications embarquées, notamment sur des...

1

Kermitt31, le 13 jun 2005 à 11:53:05

C'est pas beau comme solution mais si tu fais un truc du style
public synchronized traitement() {
System.out.println(tmp + "\n" + referer + "\n" + ID);
}

Ca te fais toujours pareil ? Proverbe Thaïlandais:Pingouins dans les champs,
hiver très méchant.

Répondre à Kermitt31

2

karine, le 13 jun 2005 à 15:26:45

En fait j'ai mis des affichages pour pas vous embrouiller la tête.
Mais il faut imaginer qu'à la place des System.out.println, j'ai des requêtes sur une BD, et les threads font n'importe quoi !

Comment je peux faire, synchronized ne fonctionne pas.
Comment faire pour qu'une méthode ne soit appelée que par un thread à la fois ?

merci beaucoup!!

Répondre à karine

3

Kermitt31, le 13 jun 2005 à 16:25:00

Tu connais les semaphores ??? Tu utilises ce sytème ! Je ne connais pas cette solution en Java, je la connais juste en C mais elle existe forcement en Java.

Essaie de te renseigner la dessus Proverbe Thaïlandais:Pingouins dans les champs,
hiver très méchant.

Répondre à Kermitt31

4

karine, le 14 jun 2005 à 14:09:21

Rebonjour !

j'ai une petite question, est-ce que oui ou non synchronized mis devant un nom de méthode empêche deux threads de faire cette méthode en même temps ?

Parce que j'ai un compteur qui est incrémenté dans cette méthode et les threads l'incrémentent en même temps, ce qui est assez énervant !! :-)

J'ai pourtant mis synchronized.
J'ai aussi essayé avec des semaphores, pas beaucoup plus de succès.
aidez-moi s'il vous plait !!
merci

Répondre à karine

5

Kermitt31, le 14 jun 2005 à 14:23:38

Moi je sais pas Proverbe Thaïlandais:Pingouins dans les champs,
hiver très méchant.

Répondre à Kermitt31

6

shaiulud, le 14 jun 2005 à 15:30:29
  • +1

Avec synchronized la méthode ne peut être appelée qu'une seul fois en même temps.

Mais tu dois avoir plusieurs instantces du même objet.
il faut faire un singleton.

public class Traitement{
// variable d'instance
private static Traitement instance;
//constructeur privé
private Traitement(){}
//récupération de l'instance
public static synchronized Traitement getInstance() {
if (instance == null) {
instance = new Traitement();
}
return instance;
}

public static synchronized traitement() {
System.out.println(tmp);
System.out.println(referer);
System.out.println(ID);
}
}

tu appelles ta méthode en static par
Traitement.traitement()

Répondre à shaiulud

7

 qotsa, le 18 nov 2008 à 18:18:20

Essais ta méthode e remplaçant System.out.println() par System.err.println() l'IO System.out est asynchrone alors que la System.err est synchrone

Répondre à qotsa
Collection CommentÇaMarche.net