Coder Social home page Coder Social logo

exercise-maven-threading's Introduction

Oefening Primetester

Deel 1 opzet

  • Creëer een Java project met Maven. Als je dat via IntelliJ doet is de naam van het project gelijk aan de artifactId en kiest IntelliJ voor groupId org.example, dat kun je aanpassen onder "Advanced Settings".
    • Kies een groupId die zinnig is en aan de conventies voldoet
    • Kies een artifactId die zinnig is.
  • Zorg ervoor dat je JUnit Jupiter versie 5.8.2 als dependency in je pom hebt staan
  • Plaats de drie bestanden die in dit project zitten op de juiste plek in je nieuwe project.

Deel 2 Project werkend maken

Het project bevat nu een klein programmaatje waarmee je kunt testen of getallen een priemgetal zijn. Er ontbreekt nog een belangrijk onderdeel, namelijk de methode die test of een getal priem is. Deze gaan we niet zelf schrijven.

  • Importeer m.b.v. Maven de dependency org.apache.commons.commons-math3, versie 3.6.1.
  • Deze dependency bevat een klasse Primes met een methode isPrime(). Deze zie je terug op regel 23 van PrimeTester. Zorg dat hij het doet.
  • Als het goed is heb je nu een werkende applicatie. Run hem via de commandline met Maven.

Deel 3 Multithreaded maken

We gaan er nu voor zorgen dat je vanuit de PrimeTestingApp meerdere threads opstart met een PrimeTester. Deze zullen gelijktijdig naar priemgetallen gaan zoeken. Vier threads is genoeg.

  • Verhoog de stopconditie tot 2000. Deze kun je vinden op regel 8 van PrimeTestingApp.
  • Zorg ervoor dat je PrimeTesters als Threads kunt opstarten. (Pas hierbij de methode startTesting van PrimeTester niet aan. Maar laat hem zoals hij is en roep hem aan vanuit een nieuwe run() methode).
  • Maak in PrimeTestingApp vier instanties van PrimeTesters en start deze op in afzonderlijke threads.
  • Maak je applicatie threadSafe.
  • Vervang tenslotte (tijdelijk) de aanroep(en) van Thread.start() door Thread.run() (niet te verwarren met Runnable.run()).
    • a) Bepaal het verschil tussen de twee methodes door de Oracle documentatie te lezen.
    • b) Bevestig de 'will execute independently of the current thread' uit de Thread.start() docs door het programma te runnen met de Thread.run() variant en naar de gelogde thread id's te kijken?
    • c) verander code daarna weer terug naar Thread.start() aanroepen

Deel 4 Omgaan met het getal 37

We gaan de code nu zo aanpassen dat de Thread die het getal 37 ontdekt als priemgetal zal sterven.

  • Maak een checked exception met de naam OuchIFoundThirtySevenAndHenceMustDieException. Zet hem ook in de juiste package.
  • Zorg ervoor dat zo snel een 'PrimeTester' erachter komt dat hij 37 aan het testen is, hij de Exceptie gooit.
  • Gooi deze exceptie al in de methode startTesting en vang hem op in de run() methode. Wanneer hij de exceptie vangt moet hij de volgende regel naar console.log printen:

13 found Thirty Seven and must die.

Dus eerst de id van de thread en dan het bericht dat hij zal sterven.

Deel 5 Unittesten

Je hebt nu drie klassen en nul unittests.

  • Zorg ervoor dat je voor alle publieke methodes, waarvoor het mogelijk is, een zinnige unittest hebt.
  • Zorg voor clean code in je test code:
    • a) gebruik goede naamgeving van je testfuncties
    • b) hanteer zoveel mogelijk standaard naamgeving van variabelen in de unit test code (zoals sut, actual, expected)
    • c) maak AAA pattern zichtbaar, en refactor evt. duplicatie uit je unit test code via bv. een @beforeEach.

exercise-maven-threading's People

Contributors

meronbrouwer avatar bartvanderwal avatar rodymiddelkoop avatar dtieman avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.