Essentiellement ce que je veux est un BlockingQueue de taille = 1. J'ai un thread "écouteur" qui attend simplement, bloquant jusqu'à ce qu'un objet soit mis dans la file d'attente, puis le récupère - et un thread "producteur" qui met réellement l'objet dans la file d'attente.Java BlockingQueue de taille = 1?
Je peux implémenter ceci avec quelques blocs synchronisés et une implémentation de BlockingQueue, mais cela semble être trop compliqué. Existe-t-il une meilleure façon de faire ce que je veux?
interface Exemple:
public interface Wait<T> {
/**
* If "put" has never been called on this object, then this method will
* block and wait until it has. Once "put" has been called with some T, this
* method will return that T immediately.
*/
public T get() throws InterruptedException;
/**
* @param object The object to return to callers of get(). If called more
* than once, will throw an {@link IllegalStateException}.
*/
public void put(T object);
}
Eh bien, c'est exactement ce que le borné nouveau ArrayBlockingQueue (1) est pour (utiliser la méthode « ajouter », pas mettre'). L'objet est assez léger en termes de synchronisation et les frais généraux de mémoire ne devraient pas faire de mal à moins que vous en ayez des dizaines de milliers. Avez-vous des préoccupations particulières? – ddimitrov