a. “De Java swingbibibliotheek is niet thread-safe”.
Leg deze uitspraak uit, en geef de gevolgen ervan voor de Swing-ontwikkelaar.

Uitleg:
De bibliotheek is niet voorzien op multithreading. Alle Swing componenten moeten vanuit dezelfde draad aangesproken worden, namelijk de EDT

Gevolgen:
Nieuwe componenten aanmaken gebeurt via invokeLater(), dat de taken aan de EDT geeft. Communicatie gebeurt ook via de EDT, events worden op de EDT gepost en die stuurt dan de bedoelde Swing component aan.

b. Over welke middelen beschikt de Java-programmeur om coördinatie tussen verschillende threads mogelijk te maken?
Maak een duidelijk onderscheid tussen de verschillende mechanismen en leg ze kort uit.

Resources kunnen afgesloten worden zodat slechts 1 thread per keer de resource kan gebruiken. Dit gebeurt dmv sloten. Zo worden Kritieke secties afgehandeld. Draden kunnen elkaar signaleren om zo een volgorde op te leggen. Dit gebeurt door de ene draad op de andere te laten wachten vooraleer verder te gaan. Zo worden races vermeden.

c.
de eerste afgewerkte A taak is ofwel A0 of A1 de B taken zijn zeker in volgorde B1 B2 B3 B4


Uitleg: Er kunnen maar 2 A taken tegelijk uitvoeren, dus om een derde te starten moet eerst A0 of A1 klaar zijn. Er kan maar 1 B taak tegelijk uitvoeren, dus ze voeren uit in de volgorde waarin opgeroepen. De C taken hebben geen vooraf bepaalde volgorde.


d. Problemen:
Als twee of meerdere aanvragen voor connecties tegelijktertijd gebeuren, kan 1 connectie aan meerdere aanvragers teruggegeven worden. Als geen connectie voorhanden is, hangt de thread vast door de while loop.


Oplossing:
getConnection synchronized maken. return niet, want anders deadlock (de while lus in getConnection is de boosdoener) Callable implementeren

  class Connection implements Callable<Connection> {} 
  public class Pool {
        
  protected volatile ArrayList<Connection> l=new ArrayList<Connection>(); 
  public Pool(int size) {
      for(int i=0;i<size;i++) l.add(new Connection());
      }
      
  public synchronized Connection call() {
      while(l.isEmpty());
      return (l.remove(0)); 
  }
  public void returnConnection(Connection c) { 
      l.add(c);

} }

asked 18 Jun '12, 22:33

Timovdw's gravatar image

Timovdw ♦♦
654
accept rate: 50%

de tabs en haakjes blijven blijkbaar niet goed behouden, maar het is duidelijk genoeg zo denkik :)

(18 Jun '12, 22:34) Timovdw ♦♦
Be the first one to answer this question!
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "Title")
  • image?![alt text](/path/img.jpg "Title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×7
×7
×2

Asked: 18 Jun '12, 22:33

Seen: 163 times

Last updated: 18 Jun '12, 22:34