Niouzes.org  

Précédent   Niouzes.org > Forum > Newsgroup fr.comp.lang.* Forum > Newsgroup fr.comp.lang.java
S'inscrire FAQ Membres Calendrier Recherche Messages du jour Marquer les forums comme lus



Réponse

 

LinkBack Outils de la discussion Modes d'affichage
  #1 (permalink)  
Vieux 24/07/2008, 10h15
acebanenco
 
Messages: n/a
Par défaut Re: synchronized

Non, il n'est pas possible de marquer la classe comme «synchronized».
La seule chose que vous puissiez faire est le suivant: un extrait de
l'interface de votre classe et l'utilisation de sollicitation de Proxy
API. Exemple:

class A {
public void m1() {...}
public int m2() {...}
}

A a = new A();
a.m2();
a.m1();


Tout d'abord, vous devez vous débarrasser de constructeur appel. Il
devrait être remplacé par une factory. Si les travaux en Eclipse, il
est un refactoring dénommé «Introduire Facotry...». Vous aurez une
nouvelle méthode

public static A create() {
creturn new A();
}

l'expression «new A()" sera remplacé par le factory appel de méthode:

A a = A.create();

Revenez à votre classe A et d'appliquer refacotring 'Extract
interface...'. Appelez cette nouvelle interface IA et sélectionnez
toutes les méthodes (m1 et m2 dans notre cas) à extraire. À noter que,
factory méthode renvoie interface IA et non A. Il est temps de créer
simplement de sollicitation de proxy handler. Il sera juste en avant
une interface appel à la cible exemple. Créer une nouvelle classe
appelée ProxyHandler:

public class ProxyHandler implements InvocationHandler {

***Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO: Implement method
return null;
}

}

Cette procuration doit transmettre la demande à l'interface certains
cas. Je déclare que l'exemple, comme un domaine dans cette classe et
de créer un appopriate constructeur:

public class ProxyHandler implements InvocationHandler {

protected final Object itsTarget;

public ProxyHandler(Object target) {
this.itsTarget = target;
}

***Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO: Implement method
return null;
}

}

Ensuite, appliquer la méthode invoke:

***Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
return method.invoke(itsTarget, args);
}

Mais nous devrions créer une proxy en quelque sorte. Utilisation
itsTarget field, nous pouvons créer une proxy pour toutes les
interfaces mises en œuvre par sa classe. La méthode suivante devrait
être ajoutée à la classe ProxyHandler:

public Object newProxy() {
Class<?> targetClass = itsTarget.getClass();
ClassLoader classLoader = targetClass.getClassLoader();
Class<?>[] interfaces = targetClass.getInterfaces();
Object proxy = Proxy.newProxyInstance(classLoader, interfaces,
this);
return proxy;
}

Et enfin méthode de mise à jour facotry. Maintenant, au lieu de
renvoyer nouvelle instance d'une classe, nous allons créer de proxy
handler et un nouveau proxy:

public static IA create() {
IA target = new A();
IA proxy = (IA) new ProxyHandler(target).newProxy();
return proxy;
}

Si vous créez simple diagramme de séquence alors vous informer que les
flux

B (A.m1)-> A

a été changé à

B (IA.m1)-> Proxy (invoke)-> ProxyHandler (IA.m1)-> A

Vous verrez pas de différence sauf si vous changez la méthode
'invoke'. Pour rendre l'interface méthodes synchronisées nous devrions
le mettre à jour de la manière suivante:

***Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
synchronized(itsTarget) {
return method.invoke(itsTarget, args);
}
}

Sorry for my pour french and let me know if you need complete
sources.


On 17 juil, 15:51, ToOmS <thomas_esco...***yahoo.fr> wrote:
> Bonjour,
>
> Une toute question, SVP : peut-on déclarer globalement une classe
> "synchronized" lorsque toutes ses méthodes le sont. Et ainsi retirer
> les mot-clefs "synchronized" de ces méthodes ?
>
> Merci d'avance


Réponse avec citation
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Niouzes.org
Standard Sponsored Links

Réponse
Tags:



Outils de la discussion
Modes d'affichage

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui



Fuseau horaire GMT. Il est actuellement 09h18.

Italiano - German - English - Español


Édité par : vBulletin® version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc. Tous droits réservés.
Version française #13 par l'association vBulletin francophone


Politique - Droit - Philosophie - Football - Medicine - Française - Bricolage - Photo - Mac Os X - Divers - Physique - Jardinage
Mecanique - Moto - Photographie - Rail - Route - Aviation - Cinema - Linux - Psychanalyse - Finance - Enigmes - Rugby
Environnement - Histoire - Programmes TV - Education - Travail - Voyages - Windows - Immobilier - Cuisine
Windows XP - Excel - Word - Outlook - Access - Internet Explorer - Office - Vista

Page generated in 0,28939 seconds with 10 queries