Uitdaging: Blockingqueue
Taak
Het is de bedoeling om enkele methoden van BlockingQueue te implementeren om beter te begrijpen hoe deze collectie werkt en om de leerstof beter onder de knie te krijgen!
Je dient naar BlockingQueueueImpl te gaan; in deze klasse zijn er 2 niet-geïmplementeerde methoden die je zelf moet uitwerken. Het is niet nodig om een ingewikkelde oplossing te bedenken; het volstaat om de functionaliteit van een standaard BlockingQueueue te herhalen.
Er is ook een Main-klasse waarin je jouw BlockingQueueueImpl moet testen om te controleren of deze correct werkt.
Dit kan gecontroleerd worden door meer dan 10 items aan de queue toe te voegen (of meer dan de limit die je in de constructor hebt geïnitialiseerd). Het volgende item moet dan wachten totdat er minder items in de queue zijn dan de limiet, en pas daarna kan het volgende item worden toegevoegd.
put() - gesynchroniseerde methode die items aan de queue toevoegt als de queue-limiet niet wordt overschreden; als dat wel het geval is, pauzeert de queue
take() - gesynchroniseerde methode die een item uit de queue haalt, het retourneert en verwijdert; als de queue leeg is, pauzeert deze
Oplossingstip
Voor de implementatie van put() moet gecontroleerd worden of de queue vol is, d.w.z. of deze niet gelijk is aan de limiet. Als dat zo is, pauzeer de thread. Als de queue niet vol is, controleer dan of de queue leeg is (isEmpty()) en als de thread leeg is, roep de methode aan die alle threads vrijgeeft (notifyAll()). Voeg daarna het item toe aan de queue.
Voor de implementatie van take() moet gecontroleerd worden of de queue leeg is. Als deze leeg is, pauzeer de thread (omdat er niets te lezen is). Als de queue niet leeg is, voer dan nog een controle uit op de volledigheid van de lijst en als de lijstgrootte gelijk is aan de limit, geef dan alle threads vrij en retourneer het eerste item in de queue (degene die het laatst is toegevoegd).
Methoden die nodig zijn om uit te voeren
wait()- pauzeert de thread;notifyAll()- wekt alle gepauzeerde threads op;queue.isEmpty()- Controleert of de wachtrij leeg is (true - wachtrij is leeg).
Na het uitvoeren van deze methoden en het testen in de Main-klasse, ga naar /src/test/java/BlockingQueueueImplTest.java en voer alle tests uit.
Als ze succesvol worden uitgevoerd, gefeliciteerd, alles is correct gedaan! Zo niet, dan is er ofwel een verkeerde oplossing of er is iets gewijzigd wat niet gewijzigd had mogen worden.
Probeer het probleem ook zelf op te lossen, maar als het niet lukt en je wilt het antwoord weten, is er een link naar de oplossing. Kopieer de code echter niet zomaar, maar probeer het te begrijpen!
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 3.33
Uitdaging: Blockingqueue
Veeg om het menu te tonen
Taak
Het is de bedoeling om enkele methoden van BlockingQueue te implementeren om beter te begrijpen hoe deze collectie werkt en om de leerstof beter onder de knie te krijgen!
Je dient naar BlockingQueueueImpl te gaan; in deze klasse zijn er 2 niet-geïmplementeerde methoden die je zelf moet uitwerken. Het is niet nodig om een ingewikkelde oplossing te bedenken; het volstaat om de functionaliteit van een standaard BlockingQueueue te herhalen.
Er is ook een Main-klasse waarin je jouw BlockingQueueueImpl moet testen om te controleren of deze correct werkt.
Dit kan gecontroleerd worden door meer dan 10 items aan de queue toe te voegen (of meer dan de limit die je in de constructor hebt geïnitialiseerd). Het volgende item moet dan wachten totdat er minder items in de queue zijn dan de limiet, en pas daarna kan het volgende item worden toegevoegd.
put() - gesynchroniseerde methode die items aan de queue toevoegt als de queue-limiet niet wordt overschreden; als dat wel het geval is, pauzeert de queue
take() - gesynchroniseerde methode die een item uit de queue haalt, het retourneert en verwijdert; als de queue leeg is, pauzeert deze
Oplossingstip
Voor de implementatie van put() moet gecontroleerd worden of de queue vol is, d.w.z. of deze niet gelijk is aan de limiet. Als dat zo is, pauzeer de thread. Als de queue niet vol is, controleer dan of de queue leeg is (isEmpty()) en als de thread leeg is, roep de methode aan die alle threads vrijgeeft (notifyAll()). Voeg daarna het item toe aan de queue.
Voor de implementatie van take() moet gecontroleerd worden of de queue leeg is. Als deze leeg is, pauzeer de thread (omdat er niets te lezen is). Als de queue niet leeg is, voer dan nog een controle uit op de volledigheid van de lijst en als de lijstgrootte gelijk is aan de limit, geef dan alle threads vrij en retourneer het eerste item in de queue (degene die het laatst is toegevoegd).
Methoden die nodig zijn om uit te voeren
wait()- pauzeert de thread;notifyAll()- wekt alle gepauzeerde threads op;queue.isEmpty()- Controleert of de wachtrij leeg is (true - wachtrij is leeg).
Na het uitvoeren van deze methoden en het testen in de Main-klasse, ga naar /src/test/java/BlockingQueueueImplTest.java en voer alle tests uit.
Als ze succesvol worden uitgevoerd, gefeliciteerd, alles is correct gedaan! Zo niet, dan is er ofwel een verkeerde oplossing of er is iets gewijzigd wat niet gewijzigd had mogen worden.
Probeer het probleem ook zelf op te lossen, maar als het niet lukt en je wilt het antwoord weten, is er een link naar de oplossing. Kopieer de code echter niet zomaar, maar probeer het te begrijpen!
Bedankt voor je feedback!