Question

Je ne trouve rien qui soit équivalent à un sémaphore dans le Blackberry Java Reference. Qu'est-ce que je rate? java.util.concurrent n'est même pas là.

Merci! Sean

Était-ce utile?

La solution

Donc, pour tous ceux qui rencontrent cela, l’excellente réponse de coldice m’amène à cette page, qui explique comment implémenter différents types de sémaphores à l’aide des primitives wait / notify disponibles dans J2ME http://tutorials.jenkov.com/java-concurrency/semaphores.html . Merci!

Autres conseils

De Utilisation de threads dans les applications J2ME par Eric Giguere :

  

Le moniteur conserve une file d'attente de threads en attente, permettant à un seul thread à la fois d'entrer dans le bloc.

     

Etant donné que chaque objet Java peut agir en tant que moniteur, la classe java.lang.Object définit trois méthodes exposant cette fonctionnalité de base: wait (), notify () et notifyAll (). Tout thread peut se suspendre en appelant la méthode wait () d'un objet:

...
Object obj = .... // some object to use as a lock

synchronized( obj ){
    // here is where you'd check obj's state

    try {
    obj.wait();
    }
    catch( InterruptedException e ){
    }
}
...
  

Le thread doit verrouiller l'objet avant d'appeler sa méthode wait (). Il doit également intercepter l’exception java.lang.InterruptedException et traiter correctement les interruptions de thread. Le thread libère implicitement son verrou sur l'objet après s'être suspendu.

     

La méthode wait () est surchargée: le thread peut spécifier un délai d’expiration facultatif en millisecondes s’il ne souhaite pas attendre indéfiniment.

     

Lorsqu'un thread se suspend lui-même, un autre thread le libère en invoquant la méthode notify () ou notifyAll () du même objet:

...
Object obj = .... // same object used as lock!

synchronized( obj ){
    obj.notify();  // or notifyAll
}
...
  

Encore une fois, le second thread doit verrouiller l'objet avant d'appeler notify () ou notifyAll (). Ces deux méthodes se comportent de la même manière, sauf que l'une réveille un thread en attente, tandis que l'autre réveille tous les threads en attente. L'ordre dans lequel les threads sont réveillés n'est pas spécifié. Chaque thread nouvellement réveillé doit obtenir son verrou sur l'objet avant de pouvoir continuer, car son verrou sur l'objet a été implicitement relâché lorsqu'il s'est suspendu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top