Je veux créer une méthode qui incendie chaque fois qu'un nouveau message est ajouté à la liste de groupeChat ArrayList.
Pseudo code: ce que j'ai essayé, mais ne fonctionne pas: p> classe de test: p> public class testGruppen extends Thread {
Gruppe gruppe;
public TestGroup(){
gruppe= new Gruppe("Monday");
}
public void run() {
System.out.println("listen");
gruppe.listenForChange();
}
public static void main(String[] args) {
testGruppen test = new testGruppen();
test.start();
test.gruppe.write("1"); // write just adds a new String to groupchat
test.gruppe.write("2");
test.gruppe.write("3");
test.gruppe.write("4");
}
3 Réponses :
Pour éviter une CPU gaspillée puis il peut être utilisé comme: p> tandis que (vrai) code> boucle avec interrogation, utilisez une méthode de rappel via un motif d'observateur / auditeur. Une façon de le faire consiste à donner à votre classe qui contient le tableau ARAYLIST un PropertyChangeSupport code>, laissez-le accepter les auditeurs, puis dans la méthode qui modifie le tableau, notifyez les auditeurs.
Vous devez jeter un coup d'œil à LinkedBlockingQueue classe . Cette classe est utile lorsque vous souhaitez réveiller un fil lorsqu'un nouvel élément est ajouté à une file d'attente. Dans l'exemple ci-dessous, chaque fois que vous ajoutez un nouveau message à la file d'attente, le thread imprimera le message et attendra le message suivant.
public class Foo extends Thread {
LinkedBlockingQueue<String> messagesQueue;
public Foo(LinkedBlockingQueue<String> messagesQueue) {
this.messagesQueue = messagesQueue;
}
@Override
public voir run() {
while(true) {
String message = messagesQueue.take();
//The thread will sleep until there is a new message in the queue.
System.out.println(message);
}
}
}
Qu'en est-il de l'utilisation de décorateur:
Vous auriez besoin de créer une interface pour permettre l'écoute des événements.
N'utilisez pas un gaspfait
tandis que (vrai) code> boucle avec le sondage, mais utilisez plutôt un système de notification de rappel tel que en donnant la classe qui détient la tremblement de l'arraylistHangesupport, permettant ainsi aux auditeurs de changement de propriété. et dans la méthode publique qui met à jour la liste des matrices, informez tous les auditeurs de modifications.Je ne comprends pas comment faire ça. Pourriez-vous me donner un petit exemple? @ Hovercaffulleels
Jetez un coup d'œil à
Observateur code> modèle de conception.Vous avez une inadéquation. (Peut-être par erreur.) En classe
Testgruppen code> Vous avez ce membre de données de classe:gruppe gruppe; code> mais vous n'avez pas fourni le code de classegruppe code>. Vous avez fourni le code de classegroupe code>.Exemple donné - voir la réponse