Fragen zur Nebenläufigkeit (Multithreading)

Fragen zur Nebenläufigkeit (Multithreading) holodoctor Tue, 03/21/2017 - 08:25

1 Nebenläufigkeit in einem Javaprogramm (Threading)

1 Nebenläufigkeit in einem Javaprogramm (Threading)

Bestimmen Sie welcher Code in welchem Thread ausgeführt wird.
Gegeben sei die Klasse ThreadTest1 die mit ihrer main() Methode als Programm gestartet wird :

public class ThreadTest1 extends Thread{
   public void run() {
     System.out.println("run: " + Thread.currentThread());
   }
 
public static void main(String[] args) {
System.out.println("main: Anfang "+ Thread.currentThread());
ThreadTest1 t1= new ThreadTest1();
ThreadTest1 t2= new ThreadTest1();
t1.run();
t1.start();
try {
t1.join();
} catch( InterruptedException i) {
}
System.out.println("main: Ende "+ Thread.currentThread());
}
}

Schreiben die Konsolenausgaben des Programms auf. Gehen Sie davon aus, dass der Aufruf von Thread.currentThread() abhängig vom laufenden Thread eine der drei Zeichenketten ausgibt:
‘main’ wenn das Programm im Hauptthread ist (Anwendungsstart)
‘t1’ wenn es im Thread arbeitet welcher zur Referenz t1 gehört
‘t2’ wenn es im Thread arbeitet welcher zur Referenz t2 gehört

Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2 Minuten
javafrage Tue, 02/14/2012 - 10:07

2 Die Methode Thread.join()

2 Die Methode Thread.join()

Was bewirkt die Befehlszeile t1.join() im folgenden Programm?
Geben Sie eine kurze Erklärung.

public class ThreadTest1 extends Thread{
   public void run() {
     System.out.println("run: " + Thread.currentThread());
   }
 
public static void main(String[] args) {
System.out.println("main: Anfang "+ Thread.currentThread());
ThreadTest1 t1= new ThreadTest1();
ThreadTest1 t2= new ThreadTest1();
t1.run();
t1.start();
try {
t1.join(); // Was bewirkt diese Programmzeile?
} catch( InterruptedException i) {
}
System.out.println("main: Ende "+ Thread.currentThread());
}
}

Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2 Minuten

Antwort zur Frage 1: Threading

Hinweis: Der Quellcode von Frage 2.16 ist identisch zum Quellcode der Frage 2.17 auf dieser Seite oben.

Das Programm produziert die folgende Konsolenausgabe:

main:Anfang main
run: main
run: t1
main:Ende main

Der Thread t2 wird zwar erzeugt aber nie gestartet.

 

javafrage Wed, 02/15/2012 - 08:24

3 Prozesse und Threads

3 Prozesse und Threads

Was ist die Beziehung zwischen einem Thread und einem Prozess?

Was haben Sie gemeinsam ?

Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2 Minuten

Antwort zur Frage 2: Die Methode Thread.join()

Der Haupthread (main) wartet bis der Thread t1 beendet wird bevor er mit der Abarbeitung fortfährt.

Das Beispiel zur Aufgabe:

public class ThreadTest1 extends Thread{
   public void run() {
     System.out.println("run: " + Thread.currentThread());
   }
 
public static void main(String[] args) {
System.out.println("main: Anfang "+ Thread.currentThread());
ThreadTest1 t1= new ThreadTest1();
ThreadTest1 t2= new ThreadTest1();
t1.run();
t1.start();
try {
t1.join(); // Was bewirkt diese Programmzeile?
} catch( InterruptedException i) {
}
System.out.println("main: Ende "+ Thread.currentThread());
}
}
javafrage Thu, 02/16/2012 - 08:41

4 Thread.start() und Thread.run()

4 Thread.start() und Thread.run()

Die Javaklasse Thread zum nebenläufigen Programmieren besitzt eine Methode start() und eine Methode run().
Was wozu dienen diese beiden Methoden ?

 

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 4 Minuten

Antwort zur Frage 3: Prozesse und Threads

Ein Thread ist ein Teil eines Prozess. Er hat einen eigenen Programmzeiger und einen eigenen Stack (Stapel). Er teilt sich den Hauptspeicher mit dem Prozess.

javafrage Wed, 01/09/2013 - 09:09

Anonymous (not verified)

Tue, 06/04/2019 - 11:31

Hallo,

in der Antwort zur Frage 3, muss "ist" anstelle dem englischen "is" stehen :)

Gruß

5 Zustände eines Java-Thread

5 Zustände eines Java-Thread

 Nennen Sie mindestens 4 der 5 Zustände die ein Java-Thread besitzen kann.

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 4 Minuten

Antwort zu Frage 4: Thread.start() und Thread.run()

Antwort Methode start() :

  • Die Methode start() überführt einen Thread in den Zustand „ready to run“. Dies bedeutet, dass er mit der Ausführung beginnen kann

Antwort Methode run():

  • In der Methode run() steht der Code den der Thread ausführen soll. Er wird ausgeführt nachdem der Thread mit der Methode start() gestartet wurde.

 

javafrage Wed, 01/09/2013 - 09:16

6 Zustände von Threads

6 Zustände von Threads

Die Klasse Thread besitzt Methoden mit denen der Entwickler die verschiedenen Zustände eines Threads beeinflussen kann. Die Methoden die die Zustandsübergänge bewirken, sind zur Orientierung gegeben. Tragen Sie Namen der vier Zustände in das Diagramm ein!

 Zustandsübergänge von Threads

Die Lösung dieser Aufgabe finden Sie hier im Skript.

Niveau 2
Schwierigkeitsgrad mittel
Zeit 4 Minuten

 

Antwort zu Frage 5: Zustände eines Java-Thread

  1. new: Der Thread wurde mit dem new Operator erzeugt. Er befindet sich im Anfangszustand. Auf seine Daten kann man zugreifen. Er ist noch nicht ablauffähig.
  2. ready-to-run: Der Thread ist lauffähig und wartet auf eine Prozessorzuweisung
  3. running: Der Thread hat einen Prozessor und führt das Programm aus
  4. blocked: Der Thread wartet auf Ressourcen
  5. dead: Der Thread kann nicht wieder gestartet werden
javafrage Sat, 03/21/2015 - 16:48

7 Schützen mit dem Schlüsselwort "synchronized"

7 Schützen mit dem Schlüsselwort "synchronized"

Nennen Sie zwei Javakonstrukte die Sie mit dem Schlüsselwort synchronized schützen können. Was bedeutet „schützen“ im Kontext von Multithreading in Java? Geben Sie eine kurze Erklärung

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2+2 Minuten

Antwort zu Frage 6: Zustände von Threads

Zustandsübergänge von Threads

javafrage Sat, 02/13/2016 - 18:51

8 Kritischer Pfad

8 Kritischer Pfad

Was ist ein kritischer Pfad/Abschnitt? (Definition)

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2+2 Minuten

Antwort zu Frage 7: Schützen mit dem Schlüsselwort "synchronized"

  1. Methoden
  2. Blöcke

Schützen bedeutet, dass nur ein Thread einen kritischen Pfad (Programmcode) bearbeiten darf. Hier kann man gewährleisten, dass eine Anzahl von Operationen auf Daten nur von einem Thread ausgeführt werden können.

javafrage Sat, 03/25/2017 - 17:52

9 Was schützt man mit dem Schlüsselwort "synchronize"

9 Was schützt man mit dem Schlüsselwort "synchronize"

Welche zwei Arten von kritischen Pfade kann man in Java mit dem Schlüsselwort synchronize schützen?

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2 Minuten

Antwort zu Frage 8: Kritischer Pfad

Ein kritischer Abschnitt ist eine Folge von Befehlen, die ein Thread nacheinander vollständig abarbeiten muss, auch wenn er vorübergehend die CPU and einen anderen Thread abgibt. Kein anderer Thread darf einen kritischen Abschnitt betreten, der auf die gleichen Variablen zugreift, solange der erstgenannte Thread mit der Abarbeitung der Befehlsfolge noch nicht fertig ist. (siehe: Goll, Seite 744)

javafrage Sat, 03/25/2017 - 17:58

10 Starten von Threads

10 Starten von Threads

Vervollständigen Sie die unten aufgeführte Klasse so, dass die Ausgabe „Hurra ich bin ein eigener Thread“ in einem anderen Thread als die main() Methode aufgerufen wird.

  • Vervollständigen Sie die main() Methode damit sie lauffähig wird
  • Implementieren Sie eine neue Methode um den Befehl mit der Ausgabe in einem eigenen Thread aufzurufen:
public class myThread extends Thread { 
   

      // mit eigener Methode umhüllen 
      System.out.println("Hurra ich bin ein eigener Thread"); 
   
  }

  public static void main(String[] args) { 
     
 
 
  }  // Ende main Methode 
} // Ende der Klasse myThread

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 6 Minuten

Antwort zu Frage 9: Was schützt man mit dem Schlüsselwort "synchronize"

  1. Methoden
  2. Blöcke
javafrage Sat, 07/13/2019 - 10:35

11 Klassen aus dem Concurrency Package

11 Klassen aus dem Concurrency Package
  • Welche Klasse aus dem Concurrency-Paket verwenden Sie wenn mit mehreren Threads schreibend auf eine ganze Zahl zugreifen müssen?
  • Warum verwenden Sie diese Klasse?
  • Wie ist das Laufzeitverhalten dieser Klasse im Vergleich zum Basistyp int?

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 1+2+2 Minuten

Antwort zu Frage: 10 Starten von Threads

public class myThread extends Thread { 
   public void run() { 

      // mit eigener Methode umhüllen 
      System.out.println("Hurra ich bin ein eigener Thread"); 
   
  }

  public static void main(String[] args) { 
     myThread t1 = new myThread();
      t1.start(); } 
 
  }  // Ende main Methode 
} // Ende der Klasse myThread
javafrage Sat, 07/13/2019 - 10:43

12 Parallisieren im Concurrency Package ohne Rückgabewerte

12 Parallisieren im Concurrency Package ohne Rückgabewerte

Sie möchten mit dem Concurrency-Paket parallel arbeiten. Sie benötigen keine Rückgabewerte. In welcher Klasse spezialisieren sie am besten und in welcher Methode implementieren Sie Ihren Algorithmus?

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2 Minuten

Antwort zu Frage: 11 Klassen aus dem Concurrency Package

  • AtomicInteger
  • Sie erlaubt das Testen und Schreiben in einer atomaren Operation. Nur ein Thread kann diese Operation gleichzeitig ausführen.
  • Sie ist deutlich langsamer, da Sie eine Klasse ist und der Zugriff durch Semaphore bzw. Monitore geschützt werden muss.
javafrage Sat, 07/13/2019 - 10:55

13 Klasse ForkJoinPool

13 Klasse ForkJoinPool

Was sind die Vorteile der Klasse ForkJoinPool auf dem Concurrency-Paket? Die Antwort finden Sie weiter unten auf dieser Seite.

Niveau 2
Schwierigkeitsgrad mittel
Zeit 2 Minuten

Antwort zu Frage: 12 Parallelisieren im Concurrency Package ohne Rückgabewerte

  • Klasse: RecursiveAction
  • Methode: compute()

 

 

 

 

 

 

 

 

 

 

 

 

Antwort zu Frage: 13 Klasse ForkJoinPool

Es wird ein Pool erzeugt, der so viele Software-Threads hat wie der Rechner Hardware-Threads.

Dadurch werden die Hardware-Threads optimal verwendet und das Betriebssystem hat weniger Stress mit dem Zuordnen der ausführbaren Threads.

javafrage Sat, 07/13/2019 - 10:58