Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Uitdaging: Blockingqueue | Gesynchroniseerde Collecties
Quizzes & Challenges
Quizzes
Challenges
/
Multithreading in Java

bookUitdaging: 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.

Note
Opmerking

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.

Note
Opmerking

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!

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 4

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 3.33

bookUitdaging: 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.

Note
Opmerking

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.

Note
Opmerking

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!

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 4
some-alt