Testen nebenläufiger Objekte

Ähnliche Dokumente
Javakurs für Fortgeschrittene

Lebenszyklus von Threads

Nebenläufigkeit mit Java

Threading. Arthur Zaczek. Aug 2015

Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads

Dr. Monika Meiler. Inhalt

Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. NumberFormatException

Parallele Prozesse. Prozeß wartet

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Ausnahmebehandlung in Java

Objektorientierte Programmierung

OOP: Nebenläufigkeiten Threads. Dipl.-Inform. Arnold Willemer

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

Beispiel für überladene Methode

Wirtschaftsinformatik II Sommersemester Lo sungshinweise zu den Ü bungen P. Mandl, M. Dolag, B. Rottmüller, et al.

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr

Programmieren II. Nebenläufigkeit. Vorlesung 9. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Threads. Kritische Bereiche

Java I Vorlesung Nebenläufigkeit

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Laborskript Verteilte Systeme

Javakurs für Anfänger

Funktionale und Objekt-Orientierte Programmierkonzepte

Klausur Software-Entwicklung März 01

Einführung Verteilte Systeme - Java Threads I -

Nebenläufige Programmierung in Java: Threads

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Vorlesung Informatik II

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

II.1.1. Erste Schritte - 1 -

II.1.1. Erste Schritte - 1 -

Verteilte Systeme. 2. Die Client-Server-Beziehung und daraus resultierende Techniken. 2.2 Nebenläufigkeitstechniken in Java

Dezentrale Kontrolle: Aktive Objekte. Aktive Objekte Die Klasse AnimatorThread Aktivierung Objekte beobachten Die Java-Klasse Thread

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele:

Philipp Güttler Progwerkstatt Letzte Änderung: Enums, Interfaces, Generics und Threads

II.1.1. Erste Schritte - 1 -

Nebenläufige Programmierung I

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

(b.) Welche Möglichkeit gibt es, die Methode run so zu verändern, dass Bora Bora IMMER zuletzt ausgegeben wird?

Nebenläufigkeit mit Java

Softwaretechnik 1 Übung 5

Prozesszustände (1a)

Programmierung mit Threads in Java

Lehrstuhl für Bioinformatik Einführung in die Programmierung für Bioinformatiker Prof. B. Rost, Dr. L. Richter Blatt

Betriebssysteme G: Parallele Prozesse (Teil A: Grundlagen)

Synchronisation in Java. Invisible Web

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Informatik II. Semesterklausur

Nebenläufigkeit mit Java

Polymorphie und UML Klassendiagramme

2A Basistechniken: Lösungen 2A.1 Wissens- und Verständnisfragen

Implementieren von Klassen

Programmierkurs C++ Abstrakte Klassen und Methoden

Praktikum aus Softwareentwicklung 2, Stunde 5

5. Threads, Serverprozesse und Benachrichtigungen

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

2 Eine einfache Programmiersprache

Info B VL 11: Innere Klassen/Collections

Parallele und funktionale Programmierung Wintersemester 2013/ Übung Abgabe bis , 16:00 Uhr

Einführung in die Informatik 1

2 Eine einfache Programmiersprache

Universität Potsdam Institut für Informatik Sommersemester Programmierung. Lehrblatt Woche 11

Java Concurrency Utilities

Parallele und verteilte Anwendungen in Java

Liste Programmieren Java Überblick

Objektorientierte Programmierung Studiengang Medieninformatik

2 Eine einfache Programmiersprache

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Teil 3 - Java. Grundlagen Klassen, Attribute Methoden

Das Interface-Konzept am Beispiel der Sprache Java

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

Programmierkurs Java

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke

9. Ausnahmebehandlung

Swing. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Institut fu r Informatik

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Info B VL 15: Multi-Threading

Info B VL 17: Deadlocks

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

2 Eine einfache Programmiersprache

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading

Leser-Schreiber-Realisierung mit Semaphoren

Motivation. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 20: Threads. Inhalt. Ein Beispiel zur Motivation

Motivation. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 20: Threads. Inhalt. Ein Beispiel zur Motivation

Transkript:

Testen nebenläufiger Objekte Threads in Java Julian Lambertz Seminar Tests in Informatik und Statistik im SS 2004 Universität Ulm J.L., Juni 2004 1

Themenüberblick Einleitung Begriff der Nebenläufigkeit Was sind Threads? J.L., Juni 2004 2

Themenüberblick Einleitung Begriff der Nebenläufigkeit Was sind Threads? Threads in Java J.L., Juni 2004 2

Themenüberblick Einleitung Begriff der Nebenläufigkeit Was sind Threads? Threads in Java Probleme bei der Verwendung von Threads Gefahren + Lösungsmöglichkeiten Hauptproblem beim Testen J.L., Juni 2004 2

Themenüberblick Einleitung Begriff der Nebenläufigkeit Was sind Threads? Threads in Java Probleme bei der Verwendung von Threads Gefahren + Lösungsmöglichkeiten Hauptproblem beim Testen Tests mit JUnit mögliche Tests Beispiel J.L., Juni 2004 2

Themenüberblick Einleitung Begriff der Nebenläufigkeit Was sind Threads? Threads in Java Probleme bei der Verwendung von Threads Gefahren + Lösungsmöglichkeiten Hauptproblem beim Testen Tests mit JUnit mögliche Tests Beispiel Fazit J.L., Juni 2004 2

Einleitung Nebenläufigkeit Das Prinzip der Nebenläufigkeit beruht auf der Vorstellung, dass Dinge gleichzeitig passieren. Das kann bedeuten: virtuell auf einem Computer mit einem Prozessor J.L., Juni 2004 3

Einleitung Nebenläufigkeit Das Prinzip der Nebenläufigkeit beruht auf der Vorstellung, dass Dinge gleichzeitig passieren. Das kann bedeuten: virtuell auf einem Computer mit einem Prozessor real auf Mehrprozessorsystemen oder bei verteilten Anwendungen J.L., Juni 2004 3

Einleitung Was sind Threads? Man unterscheidet zwischen Prozessen und Threads: J.L., Juni 2004 4

Einleitung Was sind Threads? Man unterscheidet zwischen Prozessen und Threads: Ein Prozess bezeichnet ein im Speicher befindliches ablauffähiges Programm mit seinen dafür notwendigen betriebsystemseitigen Datenstrukturen (z.b. Stack- und Programmzähler, Prozesszustand...). J.L., Juni 2004 4

Einleitung Was sind Threads? Man unterscheidet zwischen Prozessen und Threads: Ein Prozess bezeichnet ein im Speicher befindliches ablauffähiges Programm mit seinen dafür notwendigen betriebsystemseitigen Datenstrukturen (z.b. Stack- und Programmzähler, Prozesszustand...). Ein Thread (=Faden) ist eine nebenläufige Ausführungseinheit innerhalb eines Prozesses. J.L., Juni 2004 4

Einleitung Was sind Threads? Eigenschaften von Threads: J.L., Juni 2004 5

Einleitung Was sind Threads? Eigenschaften von Threads: ein gemeinsamer Adressraum innerhalb eines Prozesses jeweils eigener Programmzähler mehrere Threads können parallel ausgeführt werden ein Thread hat eine Priorität J.L., Juni 2004 5

Einleitung Was sind Threads? Eigenschaften von Threads: ein gemeinsamer Adressraum innerhalb eines Prozesses jeweils eigener Programmzähler mehrere Threads können parallel ausgeführt werden ein Thread hat eine Priorität ein Thread stellt die kleinste Einheit für die Zuteilung von Rechenzeit dar J.L., Juni 2004 5

Einleitung Was sind Threads? J.L., Juni 2004 6

Threads in Java Ablauf beim Start eines Programms Beim Starten eines Java-Programms passiert folgendes: J.L., Juni 2004 7

Threads in Java Ablauf beim Start eines Programms Beim Starten eines Java-Programms passiert folgendes: 1. das Betriebssystem erzeugt einen Prozess: Java Virtual Machine (=JVM) 2. die JVM started den Thread main, der die main-methode startet 3. ggf. werden im Programmverlauf weiter Threads gestartet J.L., Juni 2004 7

Threads in Java Ablauf beim Start eines Programms Beim Starten eines Java-Programms passiert folgendes: 1. das Betriebssystem erzeugt einen Prozess: Java Virtual Machine (=JVM) 2. die JVM started den Thread main, der die main-methode startet 3. ggf. werden im Programmverlauf weiter Threads gestartet Anmerkung: Durch Drücken von Strg + \ zur Laufzeit werden Informationen über die aktuell laufenden Threads der JVM angezeigt. J.L., Juni 2004 7

Threads in Java J.L., Juni 2004 8

Threads in Java Scheduling eine JVM bildet die Threads normalerweise auf Betriebssystem-Threads ab hiervon hängt das Scheduling ab, d.h.: J.L., Juni 2004 9

Threads in Java Scheduling eine JVM bildet die Threads normalerweise auf Betriebssystem-Threads ab hiervon hängt das Scheduling ab, d.h.: welcher Thread wann und wieviel Rechenzeit bekommt J.L., Juni 2004 9

Threads in Java Scheduling eine JVM bildet die Threads normalerweise auf Betriebssystem-Threads ab hiervon hängt das Scheduling ab, d.h.: welcher Thread wann und wieviel Rechenzeit bekommt wie (und ob überhaupt!) die Priorität berücksichtigt wird J.L., Juni 2004 9

Threads in Java Scheduling eine JVM bildet die Threads normalerweise auf Betriebssystem-Threads ab hiervon hängt das Scheduling ab, d.h.: welcher Thread wann und wieviel Rechenzeit bekommt wie (und ob überhaupt!) die Priorität berücksichtigt wird die Spezifikation der JVM ist in dieser Hinsicht ungenau konkrete JVMs können sehr unterschiedlich implementiert sein J.L., Juni 2004 9

Threads in Java Eigene Threads erzeugen In Java ist es leicht möglich, neue Threads zu erzeugen und zu starten: J.L., Juni 2004 10

Threads in Java Eigene Threads erzeugen In Java ist es leicht möglich, neue Threads zu erzeugen und zu starten: 1. man erbt von der Klasse Thread überschreibt die Methode run() und startet die Instanz des Threads mit start() J.L., Juni 2004 10

Threads in Java Eigene Threads erzeugen In Java ist es leicht möglich, neue Threads zu erzeugen und zu starten: 1. man erbt von der Klasse Thread überschreibt die Methode run() und startet die Instanz des Threads mit start() oder 2. implementiert in der gewünschten Klasse XY das Interface Runnable implementiert die Methode run() erzeugt eine Thread-Instanz mit new Thread(xyInstanz) und startet diese ebenfalls mit start() J.L., Juni 2004 10

Threads in Java Beispiel 1: Erben von Thread class MyThread extends Thread{ public void run(){ System.out.println(this); } } ------------------------------------------------- public static void main(string[] args){ } MyThread t1=new MyThread(); MyThread t2=new MyThread(); t1.start(); t2.start(); J.L., Juni 2004 11

Threads in Java Beispiel 2: Runnable implementieren class MyThread2 implements Runnable{ public void run(){ System.out.println(Thread.currentThread()); } } ------------------------------------------------- public static void main(string[] args){ } Thread t1=new Thread(new MyThread2()); Thread t2=new Thread(new MyThread2()); t1.start(); t2.start(); J.L., Juni 2004 12

Threads in Java versteckte Threads WICHTIG! in Java können versteckt mehrere Threads gestartet werden: Eventbehandlung in AWT in eigenem Thread Java Servlets... J.L., Juni 2004 13

Fehler bei der Verwendung von Threads Die Verwendung von Threads bringt immer dann besondere Gefahren mit sich, wenn diese miteinander interagieren. J.L., Juni 2004 14

Fehler bei der Verwendung von Threads Sie rufen wechselseitig Methoden auf oder schreiben/lesen wechselseitig Werte. Beispiel: int x=2; Thread1 Thread2 if(x<3) if(x<3) x++; x++; J.L., Juni 2004 15

Fehler bei der Verwendung von Threads Sie rufen wechselseitig Methoden auf oder schreiben/lesen wechselseitig Werte. Beispiel: int x=2; Thread1 Thread2 if(x<3) if(x<3) x++; x++; J.L., Juni 2004 15

Fehler bei der Verwendung von Threads Sie rufen wechselseitig Methoden auf oder schreiben/lesen wechselseitig Werte. Beispiel: int x=2; Thread1 Thread2 if(x<3) if(x<3) x++; x++; J.L., Juni 2004 15

Fehler bei der Verwendung von Threads Sie rufen wechselseitig Methoden auf oder schreiben/lesen wechselseitig Werte. Beispiel: int x=2; Thread1 Thread2 if(x<3) if(x<3) x++; x++; J.L., Juni 2004 15

Fehler bei der Verwendung von Threads Sie rufen wechselseitig Methoden auf oder schreiben/lesen wechselseitig Werte. Beispiel: int x=2; Thread1 Thread2 if(x<3) if(x<3) x++; x++; J.L., Juni 2004 15

Fehler bei der Verwendung von Threads Sie rufen wechselseitig Methoden auf oder schreiben/lesen wechselseitig Werte. Beispiel: int x=2; Thread1 Thread2 if(x<3) if(x<3) x++; x++; J.L., Juni 2004 15

Fehler bei der Verwendung von Threads Sie rufen wechselseitig Methoden auf oder schreiben/lesen wechselseitig Werte. Beispiel: int x=2; Thread1 Thread2 if(x<3) if(x<3) x++; x++; Somit ist x gleich 4! J.L., Juni 2004 15

Fehler bei der Verwendung von Threads synchronized 1 Lösung: Schlüsselwort synchronized class MyThread extends Thread{ //... public void foo(ressource r){ } } synchronized(r){ if(r.x<3) r.x++; } class Ressource{ public int x; } J.L., Juni 2004 16

Fehler bei der Verwendung von Threads synchronized 2 solange ein Thread sich bei der Ausführung innerhalb eines synchronized-blocks befindet, ist die betreffende Ressource für andere Threads gesperrt (gegenseitiger Aussschluss) J.L., Juni 2004 17

Fehler bei der Verwendung von Threads synchronized 2 solange ein Thread sich bei der Ausführung innerhalb eines synchronized-blocks befindet, ist die betreffende Ressource für andere Threads gesperrt (gegenseitiger Aussschluss) ein synchronized-block kann innerhalb eines anderen Code-Blocks verwendet werden die betreffende Ressource ist gesperrt J.L., Juni 2004 17

Fehler bei der Verwendung von Threads synchronized 2 solange ein Thread sich bei der Ausführung innerhalb eines synchronized-blocks befindet, ist die betreffende Ressource für andere Threads gesperrt (gegenseitiger Aussschluss) ein synchronized-block kann innerhalb eines anderen Code-Blocks verwendet werden die betreffende Ressource ist gesperrt Methoden können synchronized deklariert werden das ganze Objekt ist gesperrt J.L., Juni 2004 17

Fehler bei der Verwendung von Threads synchronized 2 solange ein Thread sich bei der Ausführung innerhalb eines synchronized-blocks befindet, ist die betreffende Ressource für andere Threads gesperrt (gegenseitiger Aussschluss) ein synchronized-block kann innerhalb eines anderen Code-Blocks verwendet werden die betreffende Ressource ist gesperrt Methoden können synchronized deklariert werden das ganze Objekt ist gesperrt synchronized-methoden/-blöcke können ineinander geschachtelt werden bzw. einander aufrufen J.L., Juni 2004 17

Fehler bei der Verwendung von Threads synchronized 3 Graphisch dargestellt: J.L., Juni 2004 18

Fehler bei der Verwendung von Threads synchronized 3 Graphisch dargestellt: Anmerkung: Wenn mehrere Threads eine Ressource benötigen, ist die Verwendung der Methoden wait(), notify(), notifyall() zu empfehlen um das Warten/die Benachrichtigung bzgl. gesperrten Ressourcen zu regeln (s. Dokumentation, Klasse Object). J.L., Juni 2004 18

Fehler bei der Verwendung von Threads Deadlock aus den genannten Synchronisationsmechanismen resultiert ein weiterer möglicher Fehler, ein sog. Deadlock ein Deadlock tritt auf, wenn ein oder mehrere Threads unbeabsichtigt blockiert werden Ursachen sind: J.L., Juni 2004 19

Fehler bei der Verwendung von Threads Deadlock aus den genannten Synchronisationsmechanismen resultiert ein weiterer möglicher Fehler, ein sog. Deadlock ein Deadlock tritt auf, wenn ein oder mehrere Threads unbeabsichtigt blockiert werden Ursachen sind: mehrere Threads warten auf Ressourcen, die jeweils ein anderer gesperrt hat J.L., Juni 2004 19

Fehler bei der Verwendung von Threads Deadlock aus den genannten Synchronisationsmechanismen resultiert ein weiterer möglicher Fehler, ein sog. Deadlock ein Deadlock tritt auf, wenn ein oder mehrere Threads unbeabsichtigt blockiert werden Ursachen sind: mehrere Threads warten auf Ressourcen, die jeweils ein anderer gesperrt hat irregulär beendete Threads J.L., Juni 2004 19

Testen nebenläufiger Anwendungen Nichtdeterminismus das Hauptproblem beim Testen ist der Nichtdeterminismus das Verhalten eines Java-Programms mit mehreren Threads ist abhängig von: J.L., Juni 2004 20

Testen nebenläufiger Anwendungen Nichtdeterminismus das Hauptproblem beim Testen ist der Nichtdeterminismus das Verhalten eines Java-Programms mit mehreren Threads ist abhängig von: dem Scheduling (Betriebssystem/JVM) J.L., Juni 2004 20

Testen nebenläufiger Anwendungen Nichtdeterminismus das Hauptproblem beim Testen ist der Nichtdeterminismus das Verhalten eines Java-Programms mit mehreren Threads ist abhängig von: dem Scheduling (Betriebssystem/JVM) von der Leistung des verwendeten Systems J.L., Juni 2004 20

Testen nebenläufiger Anwendungen Nichtdeterminismus das Hauptproblem beim Testen ist der Nichtdeterminismus das Verhalten eines Java-Programms mit mehreren Threads ist abhängig von: dem Scheduling (Betriebssystem/JVM) von der Leistung des verwendeten Systems u.u. auch von der momentanen Systemlast J.L., Juni 2004 20

Testen nebenläufiger Anwendungen Nichtdeterminismus das Hauptproblem beim Testen ist der Nichtdeterminismus das Verhalten eines Java-Programms mit mehreren Threads ist abhängig von: dem Scheduling (Betriebssystem/JVM) von der Leistung des verwendeten Systems u.u. auch von der momentanen Systemlast dem verwendeten Compiler J.L., Juni 2004 20

Testen nebenläufiger Anwendungen Nichtdeterminismus das Hauptproblem beim Testen ist der Nichtdeterminismus das Verhalten eines Java-Programms mit mehreren Threads ist abhängig von: dem Scheduling (Betriebssystem/JVM) von der Leistung des verwendeten Systems u.u. auch von der momentanen Systemlast dem verwendeten Compiler Tests sind nicht einfach wiederholbar! J.L., Juni 2004 20

Testen nebenläufiger Anwendungen Nichtdeterminismus das Hauptproblem beim Testen ist der Nichtdeterminismus das Verhalten eines Java-Programms mit mehreren Threads ist abhängig von: dem Scheduling (Betriebssystem/JVM) von der Leistung des verwendeten Systems u.u. auch von der momentanen Systemlast dem verwendeten Compiler Tests sind nicht einfach wiederholbar! ein Fehler tritt bei gleichen Eingaben vielleicht nur sehr selten auf! J.L., Juni 2004 20

JUnit JUnit kann bedingt zum Testen nebenläufiger Anwendungen benutzt werden: J.L., Juni 2004 21

JUnit JUnit kann bedingt zum Testen nebenläufiger Anwendungen benutzt werden: zum wiederholten Testen: die Klasse RepeatedTest J.L., Juni 2004 21

JUnit JUnit kann bedingt zum Testen nebenläufiger Anwendungen benutzt werden: zum wiederholten Testen: die Klasse RepeatedTest zum Überprüfen bestimmter Annahmen über den Zustand von Threads J.L., Juni 2004 21

JUnit JUnit kann bedingt zum Testen nebenläufiger Anwendungen benutzt werden: zum wiederholten Testen: die Klasse RepeatedTest zum Überprüfen bestimmter Annahmen über den Zustand von Threads Anmerkung: Unter http://www.dpunkt.de/utmj können einige Erweiterungen und Beispiele zum Testen von Threads heruntergeladen werden. J.L., Juni 2004 21

JUnit Beispiel: public static Test suite(){ TestSuite suite = new TestSuite(TestThreads.class); return new junit.extensions.repeatedtest(suite, 300); } public void testdeadlock(){ } t.startt1andt2(); Assert.assertFalse("deadlock ", ( (t.gett1wants()==t.gett2has()) &&(t.gett2wants()==t.gett1has()) )); J.L., Juni 2004 22

Fazit J.L., Juni 2004 23

Fazit die Programmierung mit mehreren Threads bringt neue Fehlerquellen mit sich J.L., Juni 2004 23

Fazit die Programmierung mit mehreren Threads bringt neue Fehlerquellen mit sich die Fehler sind oftmals schlecht zu finden und kaum reproduzierbar (Nichtdeterminismus) J.L., Juni 2004 23

Fazit die Programmierung mit mehreren Threads bringt neue Fehlerquellen mit sich die Fehler sind oftmals schlecht zu finden und kaum reproduzierbar (Nichtdeterminismus) deshalb kann man sich noch weniger auf die Ergebnisse von Tests verlassen als sonst J.L., Juni 2004 23

Fazit die Programmierung mit mehreren Threads bringt neue Fehlerquellen mit sich die Fehler sind oftmals schlecht zu finden und kaum reproduzierbar (Nichtdeterminismus) deshalb kann man sich noch weniger auf die Ergebnisse von Tests verlassen als sonst JUnit kann hier nur bedingt helfen J.L., Juni 2004 23

Fazit die Programmierung mit mehreren Threads bringt neue Fehlerquellen mit sich die Fehler sind oftmals schlecht zu finden und kaum reproduzierbar (Nichtdeterminismus) deshalb kann man sich noch weniger auf die Ergebnisse von Tests verlassen als sonst JUnit kann hier nur bedingt helfen ein gutes Konzept und eine klare Trennng des nebenläufigen Codes vom Rest ist erforderlich! J.L., Juni 2004 23

Literatur 1. Maurice Schoenmakers, Nebenläufigkeit in Java, 2001 http://wwwspies.informatik.tumuenchen.de/lehre/vorlesung/ws0001/info3/threads.pdf 2. J. Link, Unit Tests mit Java, dpunkt.verlag, 2002. 3. Goll, Weiß, Rothländer, http://www.it.fht-esslingen.de/ heinisch/javabuch/, Teubner Verlag, 2001 4. Java 2 Platform, Standard Edition, v 1.4.1 API Specification, Sun Microsystems, Inc., 2002, http://java.sun.com 5. The Java Virtual Machine Specification, Sun Microsystems, Inc., 1999, http://java.sun.com J.L., Juni 2004 24