OVH Cloud OVH Cloud

multithread

7 réponses
Avatar
Franck
Bonjour,

J'ai jamais fait de multithreading en Java...

... et je mets en place un système de cache pour mon serveur d'application
Ce système va faire des sérialization/désérialization d'objets

Sachant que la classe gérant ce système ressemble grosso-modo à ça :

public final class Cache {

public CacheItem getCacheItem(String key) {
// Je désérialize
}

public synchronized void setCacheItem(String key, CacheItem cacheItem) {
// Je sérialize
}
}

Comment être sur :

- qu'un thread va attendre qu'un autre ait finit d'ecrire un objet pour
eventuellement l'ecraser (je pense que le motcle synchronized suffit ?)

- qu'un thread va attendre qu'un autre ait finit d'ecrire un fichier
pour le lire (là je sais pas du tout ...)

Merci d'avance

--
Franck Lefebure
mailto:flefebure2.remove@this.orangecaraibe.com

7 réponses

Avatar
Emmanuel Bourg
Tu as pensé à utiliser un système de cache existant avant de tout
refaire à la main ?

Emmanuel


Franck wrote:

Bonjour,

J'ai jamais fait de multithreading en Java...

... et je mets en place un système de cache pour mon serveur d'applic ation
Ce système va faire des sérialization/désérialization d'objets

Sachant que la classe gérant ce système ressemble grosso-modo à ç a :

public final class Cache {

public CacheItem getCacheItem(String key) {
// Je désérialize
}

public synchronized void setCacheItem(String key, CacheItem cacheIt em) {
// Je sérialize
}
}

Comment être sur :

- qu'un thread va attendre qu'un autre ait finit d'ecrire un objet pour
eventuellement l'ecraser (je pense que le motcle synchronized suffit ?)

- qu'un thread va attendre qu'un autre ait finit d'ecrire un fichie r
pour le lire (là je sais pas du tout ...)

Merci d'avance

--
Franck Lefebure
mailto:




Avatar
Franck
Emmanuel Bourg wrote:
Tu as pensé à utiliser un système de cache existant avant de tout
refaire à la main ?

Emmanuel


Oui, je m'inspire de http://actioncache.neteye.de/ pour faire du caching sur
une appli struts

mais je ne veux pas cacher les pages en entier (pas pratique à cause des
forward vers les views)

Donc en ce moment je m'oriente vers un caching des beans créés dans le
controller
par sérialization. Mais je suis un peu bloqué par la synchronisation des
threads

j'essaye de m'inspirer de ce qu'il ont fait (classe
de.neteye.actioncache.ReaderWriterLock)
mais j'ai du mal à tout saisir.

--
Franck Lefebure
mailto:

Avatar
Emmanuel Bourg
Il existe des caches qui travaillent au niveau des objets, jettes y un
coup d'oeil ça pourrait te faire gagner du temps :

OSCache
http://www.opensymphony.com/oscache

JCS - Java Caching System
http://jakarta.apache.org/turbine/jcs

SwarmCache
http://swarmcache.sourceforge.net

ShiftOne Java Object Cache
http://jocache.sourceforge.net

Emmanuel


Franck wrote:

Emmanuel Bourg wrote:

Tu as pensé à utiliser un système de cache existant avant de tout
refaire à la main ?

Emmanuel



Oui, je m'inspire de http://actioncache.neteye.de/ pour faire du cachin g sur
une appli struts

mais je ne veux pas cacher les pages en entier (pas pratique à cause des
forward vers les views)

Donc en ce moment je m'oriente vers un caching des beans créés dans le
controller
par sérialization. Mais je suis un peu bloqué par la synchronisatio n des
threads

j'essaye de m'inspirer de ce qu'il ont fait (classe
de.neteye.actioncache.ReaderWriterLock)
mais j'ai du mal à tout saisir.

--
Franck Lefebure
mailto:





Avatar
Franck
Emmanuel Bourg wrote:
Il existe des caches qui travaillent au niveau des objets, jettes y un
coup d'oeil ça pourrait te faire gagner du temps :


Merci, je regarde.

--
Franck Lefebure
mailto:

Avatar
Franck
Ceci dit,

J'aimerais bien savoir comment en Java gérer
proprement l'accès concurrent à un fichier (locks)

Sachant que :
- je veux que plusieurs threads puissent lire un fichier simultanément.
- je veux que les threads attendent lorsque qu'un autre modifie un
fichier
- je veux qu'un thread attende que les autres aient fini de le lire
avant de le modifier.

Simple non ?
et pourtant je ne vois pas de mécanisme natif dans le jdk pour faire ça.

Merci

--
Franck Lefebure
mailto:
Avatar
Emmanuel Bourg
C'est possible avec un FileLock dans le package java.nio :
http://java.sun.com/j2se/1.4.2/docs/api/java/nio/channels/FileLock.html

Emmanuel


Franck wrote:

Ceci dit,

J'aimerais bien savoir comment en Java gérer
proprement l'accès concurrent à un fichier (locks)

Sachant que :
- je veux que plusieurs threads puissent lire un fichier simultané ment.
- je veux que les threads attendent lorsque qu'un autre modifie un
fichier
- je veux qu'un thread attende que les autres aient fini de le lire
avant de le modifier.

Simple non ?
et pourtant je ne vois pas de mécanisme natif dans le jdk pour faire ça.

Merci

--
Franck Lefebure
mailto:




Avatar
RaOuf
Je pense que je réponds une connerie, mais,pourquoi synchronized ca marche
pas ???

"Franck" a écrit dans le message
de news:
Bonjour,

J'ai jamais fait de multithreading en Java...

... et je mets en place un système de cache pour mon serveur d'application
Ce système va faire des sérialization/désérialization d'objets

Sachant que la classe gérant ce système ressemble grosso-modo à ça :

public final class Cache {

public CacheItem getCacheItem(String key) {
// Je désérialize
}

public synchronized void setCacheItem(String key, CacheItem cacheItem)
{

// Je sérialize
}
}

Comment être sur :

- qu'un thread va attendre qu'un autre ait finit d'ecrire un objet
pour

eventuellement l'ecraser (je pense que le motcle synchronized suffit ?)

- qu'un thread va attendre qu'un autre ait finit d'ecrire un fichier
pour le lire (là je sais pas du tout ...)

Merci d'avance

--
Franck Lefebure
mailto: