OVH Cloud OVH Cloud

Semaphore fifo en java

2 réponses
Avatar
matlerouge
Bonjour

J'aimerais bien savoir s'il est possible de faire une classe semaphore
fifo en java. J'ai ecrit une classe, le pb c'est que java reveille les
thread aleatoirement.
Si je passe un objet en parametre de P() ou V(), et que je fais un
notify() ou wait() sur cet objet, j'ai une exception.
Comment faire ?
merci

voici ma classe semaphore :

public class Semaphore
{


public Semaphore(int Q)
{
cpt = Q;

}


public synchronized void P() throws Exception
{
cpt--;
if (cpt < 0)
wait();
}


public synchronized void V()
{
cpt ++;
if (cpt <= 0)
notify();
}


private int cpt;

}

2 réponses

Avatar
Simon OUALID
matlerouge wrote:
public synchronized void P() throws Exception
{
cpt--;
if (cpt < 0)
wait();
}



C'est normal, une InterruptedException est levée naturellement sur le
wait. Il faut la catcher et la logger.

Le reste est ok à mes yeux.

Sinon en java5 il y a une nouvelle classe Semaphore fournie par Sun.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Semaphore.html

Avatar
BennyLaMalice
j'ai trouvé ceci qui devrait ressembler a ce que tu recherches :

http://www.mathcs.emory.edu/dcl/util/backport-util-concurrent/doc/api/edu/e mory/mathcs/backport/java/util/concurrent/Semaphore.html