Fragen zur Java-Zertifizierung, Threads

Frage

Welche Aussage ist wahr für die Funktion notify() in Verbindung mit wait()?

  1. Wenn mehr als ein Thread auf eine Bedingung wartet, wird nur der Thread benachrichtigt, der am längsten wartet.
  2. Wenn mehr als ein Thread auf eine Bedingung wartet, läßt sich nicht ausmachen, welcher Thread benachrichtigt wird.
  3. notify() ist in der Klasse Thread definiert.
  4. Es ist nicht unbedingt erforderlich, den Lock für das Objekt zu besitzen, dessen notify() Methode wir aufrufen.
  5. notify() sollte nur innerhalb einer while Schleife aufgerufen werden.

Frage

Gegeben sei die folgende Klasse

class Counter {
 public int start = 1;
 public int end = 100;
 public static void main( String args[] ) {
  new Counter().go();
 }
 void go() {
  // A
  Thread t = new Thread( a );
  t.start();
 }
}

Welcher Block kann in der Zeile A eingesetzt werden, so dass das Programm von start bis end zählt?

  1. Runnable a = new Runnable() {

    public void run() {for ( int i = start; i <= end; i++ )

    System.out.println( i );

    }

    }

  2. a implements Runnable {

    public void run() {for ( int i = start; i <= end; i++ )

    System.out.println( i );

    }

    }

  3. Thread a = new Thread() {

    public void run() {for ( int i = start; i <= end; i++ )

    System.out.println( i );

    }

    }

Frage

Analysiere das folgende Programm:

class WasPassiert implementes Runnable
{
 public static void main( String args[] )
 {
  Thread t = new Thread( this );
  t.start()
 }
 public void run()
 {
  System.out.println( "Schnickschnack" );
 }
}
  1. Das Programm lässt sich nicht kompilieren
  2. Das Programm lässt sich kompilieren, aber nichts erscheint auf der Standardausgabe
  3. Das Programm lässt sich kompilieren und das Wort „Schnickschnack“ erscheint einmal auf der Standardausgabe.
  4. Das Programm lässt sich kompilieren und das Wort „Schnickschnack“ erscheint ununterbrochen auf der Standardausgabe, bis der Benutzer mit Control-C das Programm beendet.

Frage

Was muss für die Klasse RunHandler gelten, so dass eine Instanz von RunHandler wie folgt benutzt werden kann?

class Test  
{
 public static void main( String args[] )
 {
  Thread t = new Thread( new RunHandler() );
  t.start();
 }
}
  1. RunHandler muss das Interface java.lang.Runnable implementieren.
  2. RunHandler muss die Klasse Thread erweitern.
  3. RunHandler muss eine Methode run() anbieten, die öffentlich ist und void zurückgibt.
  4. RunHandler muss eine init() Methode anbieten.

Ähnliche Beiträge

Ein Gedanke zu “Fragen zur Java-Zertifizierung, Threads

  1. Einige der Formulierungen erscheinen mir etwas zu unpräzise.

    1. Wenn Mehrfachantworten möglich sind, dieses bitte kennzeichnen.

    2. Für die erste Frage heißt es in einer Antwortmöglichkeit „notify() ist in der Klasse Thread definiert“. Ist damit gefragt, ob die Methode für Threads existiert oder dass es sie für Thread gibt, aber nicht geerbt wird? Ist „in … definiert“ könnte als jede der beiden Varianten interpretiert werden.

    3. Nochmals die Antworten zur ersten Frage: „Es ist nicht unbedingt erforderlich, den Lock für das Objekt zu besitzen …“. Wofür soll es denn unbedingt erforderlich sein? Damit das Programm kompiliert? Damit es keinen Laufzeitfehler gibt (sofern man die entsprechende Ausnahme nicht fängt)? Damit man den wartenden Thread erfolgreich aus dem Wartezustand holt? Bitte präzisieren.

    4. Für die Antworten von Frage zwei und drei wären vernünftige Einrückungen schön. 🙂

    5. Für das angegebene Programm der letzten Frage sollte es vermutlich „implements“ statt „implementes“ heißen, die doppelten Anführungszeichen für das Stringliteral sollen bestimmt auch keine HTML-codierten Anführungszeichen sein und ein Semikolon nach t.start() stehen. Sonst kommt man zu einfach zu der Lösung Antwort 1 (die nach den Reparaturen immer noch richtig ist). 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert