2009-10-30 9 views
2

Je n'arrive pas à trouver quelque chose d'équivalent à un Sémaphore dans le Blackberry Java Reference. Qu'est-ce que je rate? java.util.concurrent n'est même pas là.Blackberry Semaphore class

Merci! Sean

Répondre

0

De Using Threads in J2ME Applications by Eric Giguere:

Le moniteur maintient une file d'attente de threads d'attente, ce qui permet un seul fil à la fois d'entrer dans le bloc. Comme chaque objet Java peut servir de moniteur, la classe java.lang.Object définit trois méthodes qui exposent cette fonctionnalité de base: wait(), notify() et notifyAll(). Tout thread peut se suspendre en appelant attente d'un objet() méthode:

... 
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 fil doit verrouiller l'objet avant d'appeler sa méthode d'attente(). Il doit également capturer l'exception java.lang.InterruptedException et traiter correctement les interruptions de thread. Le thread libère implicitement son verrou sur l'objet après qu'il se soit arrêté.

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

Une fois qu'un fil suspend lui-même, un autre fil de presse en invoquant la même méthode de l'objet notify() ou notifyAll():

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

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

Encore une fois, le deuxième fil doit verrouiller l'objet avant d'appeler notifier() ou notifierAll(). Ces deux méthodes se comportent de la même façon sauf que l'une réveille un fil d'attente tandis que l'autre réveille tous les fils en attente. L'ordre dans lequel les threads sont réveillés n'est pas spécifié. Chaque thread nouvellement réveillé doit ré-obtenir son verrou sur l'objet avant qu'il puisse réellement continuer, parce que son verrou sur l'objet a été implicitement libéré quand il s'est suspendu lui-même.

+0

J'ai essayé de vous voter mais apparemment je n'ai pas la "réputation". Il semble que je puisse implémenter un vrai sémaphore avec ces primitives comme ceci http://tutorials.jenkov.com/java-concurrency/semaphores.html. Pensez-vous que c'est une stratégie valable? J'ai besoin de la sémantique "comptage". – spurserh

+0

Je comprends votre question maintenant. Bien sûr, vous pouvez l'implémenter (et n'oubliez pas de le poster comme réponse à votre question). –