Java génère simultanément une quantité infinie d’objects

J’ai donc besoin de faire un simulateur d’ascenseur, et je me demandais comment puis-je générer de façon continue des personnes qui appellent l’ascenseur. J’ai besoin de ça pour toujours. Donc, fondamentalement, une personne est créée et appelle l’ascenseur. Tous ces appels sont gardés en mémoire, mais je pense que je dois également suivre les personnes qui se trouvent dans l’ascenseur.

J’ai quelques classes Person , Elevator , ElevatorCall & ElevatorCallQueue .

  1. En personne, j’ai une méthode run() qui effectue un appel d’ascenseur avec l’étage actuel et l’étage de destination, puis j’ai une BlockingQueue laquelle j’ai placé l’appel. Cette méthode d’exécution est simplement exécutée en tant que vraie

  2. Dans ElevatorCall je n’ai que des getter et des setters pour les étages de collecte et de destination

  3. Dans ElevatorCallQueue, j’ai des variables pour MAX_CALLS et numberOfPeople. J’ai une BlockingQueue queue = new ArrayBlockingQueue(MAX_CALLS) et une List J’ajoute des personnes à la liste et je parcours la liste, puis lance la méthode run() sur chaque personne. Enfin, je crée un ascenseur, je fournis la file d’attente et l’exécute.

  4. Dans Elevator, j’ai la BlockingQueue . J’ai aussi un while(true ) ici, et à l’intérieur de celui-ci, je ArrayList un ArrayList , puis j’utilise la méthode BlockingQueues drainTo en utilisant le paramètre ArrayList . Le rest de la méthode run() parcourt essentiellement la liste de tableaux et fait ce que fait un ascenseur. Il se dirige donc vers le premier bouton enfoncé, vérifie chaque étage des personnes et s’il s’agit d’un étage de destination.

En ce moment, je suis coincé et je ne sais pas où aller à partir de maintenant. J’ai besoin de savoir comment les gens ont continuellement ajouté et appelé l’ascenseur, et fait attendre l’ascenseur s’il n’y a plus d’appels. Je serais reconnaissant si quelqu’un pouvait m’aider à me mettre dans la bonne direction. Merci

MODIFIER

Voici le code de la classe d’ascenseur, comme quelqu’un l’a dit, je devrais poster du code. Cependant, je ne suis pas sûr du code à poster, alors je me suis dit que je devrais simplement mettre dans la classe entière.

Je pense que tout le monde a très vite saisi le mot concomitance – ne le laissez pas troubler votre jugement. Je ne peux pas parler au nom de vos problèmes / critères exacts, mais un ascenseur se déplace vers les étages, le seul problème étant une nouvelle personne appuyant sur un bouton. Alors, pourquoi ne pas donner à l’ascenseur une méthode simulate(int time) qui le fait, et une méthode new_person(person p) qui ajoute une autre personne à la queue. Ensuite, générez simplement un intervalle de temps aléatoire, simulez l’ascenseur, ajoutez une nouvelle personne avec une destination et une source d’étage aléatoires, puis répétez l’opération.

Mais vous dites que cela doit être simultané –

Eh bien, votre question semble être d’où viennent les appels d’ascenseurs?

Ceci est un exemple du modèle de consommation de producteur typique. Qu’est-ce que vous demandez? Eh bien, la documentation Oracle pour BlockingQueue donne un meilleur exemple que jamais.

 class Producer implements Runnable { private final BlockingQueue queue; Producer(BlockingQueue q) { queue = q; } public void run() { try { while (true) { queue.put(produce()); } } catch (InterruptedException ex) { ... handle ...} } Object produce() { ... } } class Consumer implements Runnable { private final BlockingQueue queue; Consumer(BlockingQueue q) { queue = q; } public void run() { try { while (true) { consume(queue.take()); } } catch (InterruptedException ex) { ... handle ...} } void consume(Object x) { ... } } class Setup { void main() { BlockingQueue q = new SomeQueueImplementation(); Producer p = new Producer(q); Consumer c1 = new Consumer(q); Consumer c2 = new Consumer(q); new Thread(p).start(); new Thread(c1).start(); new Thread(c2).start(); } } 

Hmm .. Pouvez-vous voir comment cela se rapporte à votre problème? Vous en avez déjà résolu la moitié.

The Elevator agit en tant que consommateur des ascenseurs, vous semblez avoir du mal à savoir qui les produit. Ceci est un travail pour un nouveau thread qui exécute un producteur ElevatorCall. Voyez si vous pouvez travailler le rest.