Übung 8: Semaphore in Java (eigene Implementierung)

Ähnliche Dokumente
Übung: Verwendung von Java-Threads

Whitepaper. Produkt: combit Relationship Manager. SQL Server 2008 R2 Express um Volltextsuche erweitern. combit GmbH Untere Laube Konstanz

Version 0.3. Installation von MinGW und Eclipse CDT

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Daten Sichern mit dem QNAP NetBak Replicator 4.0

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

BSV Software Support Mobile Portal (SMP) Stand

Kurzanleitung zur Softwareverteilung von BitDefender Produkten...2

Anleitung zur Verwendung der VVW-Word-Vorlagen

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

Ablaufbeschreibung für das neu Aufsetzen von Firebird und Interbase Datenbanken mit der IBOConsole

Kurzeinstieg in VR-Ident personal

I. Travel Master CRM Installieren

Der Kalender im ipad

Installation Hardlockserver-Dongle

IBM Software Demos Tivoli Provisioning Manager for OS Deployment

Individuelle Formulare

Drägerware.ZMS/FLORIX Hessen

GEWAN Anleitung zum Ausschalten der Java- Sicherheitswarnungen unter Windows 7

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Einrichten des Elektronischen Postfachs

TeamSpeak3 Einrichten

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Sichern der persönlichen Daten auf einem Windows Computer

Herzlich willkommen bei der Installation des IPfonie -Softclients!

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

Step by Step Webserver unter Windows Server von Christian Bartl

Internet online Update (Internet Explorer)

Inhalt. 1 Installation und Konfiguration des Citrix Receivers

Microsoft Dynamics NAV 2013 R/2 Installationsanleitung. Inhalt: Begleitmaterial des ERP Übungsbuchs:

Installation von Office 365 auf einem privaten PC

Installationsanleitung für pcvisit Server (pcvisit 15.0)

Das tgm stellt virtuelle Desktops zur Verfügung. Um diese nutzen zu können, gehen Sie bitte wie folgt vor:

Vorgehensweise bei der Installation Bob50SQL für einen unabhängigen PC.

Blumen-bienen-Bären Academy. Kurzanleitung für Google Keyword Planer + Google Trends

Verwendung des IDS Backup Systems unter Windows 2000

Arbeiten mit dem Outlook Add-In

Kurzanleitung MAN E-Learning (WBT)

Multiplayer Anweisungen

Einen Wiederherstellungspunktes erstellen & Rechner mit Hilfe eines Wiederherstellungspunktes zu einem früheren Zeitpunkt wieder herstellen

Information zum SQL Server: Installieren und deinstallieren. (Stand: September 2012)

Installationsanweisung Gruppenzertifikat

Einführung in Eclipse und Java

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Outlook Web App 2010 Kurzanleitung

Internet Explorer Version 6

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Tipps und Tricks zu Netop Vision und Vision Pro

Einrichtung eines -Zugangs mit Mozilla Thunderbird

Die nachfolgende Anleitung zeigt die Vorgehensweise unter Microsoft Windows Vista.

schooltas offline Modus mit der Google Chrome App

Um eine Person in Magnolia zu erfassen, gehen Sie wie folgt vor:

Bedienungsanleitung. Stand: Copyright 2011 by GEVITAS GmbH

ICS-Addin. Benutzerhandbuch. Version: 1.0

ftp://ftp.dlink.de/dpr/dpr-1061/documentation/dpr-1061%20printer%20compatible%20list.pdf

Schritt-für-Schritt-Anleitung So verschlüsseln Sie Ihr -Konto in der Software 6.0

GS-Programme 2015 Allgemeines Zentralupdate

Anleitung zur Updateinstallation von ElsaWin 4.00

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Installation DataExpert Paynet-Adapter (SIX)

Citrix Receiver Server-Umstieg

Family Safety (Kinderschutz) einrichten unter Windows 7

Import Zertifikate ELM

Windows / Mac User können sich unter folgenden Links die neueste Version des Citrix Receiver downloaden.

Fastviewer Remote Support & Präsentation - Teilnehmer

So richten Sie ihre s unter Outlook Express 5 / 6 ein

Im vorliegenden Tutorial erfahren Sie, wie Sie in myfactory Postfächer für den Posteingang und den Postausgang anlegen.

Installation älterer Programmversionen unter Windows 7

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Einrichten von Pegasus Mail zur Verwendung von MS Exchange und Übertragen der alten Maildaten auf den neuen Server

Installation und Einrichtung egk-lesegeräte

1 Voraussetzungen für Einsatz des FRITZ! LAN Assistenten

BayLern Hilfe Inhalt:

Verarbeitung von ZV-Dateien im Internetbanking. Inhalt. 1. Datei einlesen Datei anzeigen, ändern, löschen Auftrag ausführen...

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Dieses Dokument beschreibt die Vorgehensweise wie Sie eine Signatur mit ava sign 4.0 prüfen können.

Citrix Receiver Installation

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Historical Viewer. zu ETC5000 Benutzerhandbuch 312/15

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Arbeitsblätter auf die Schülercomputer verteilen, öffnen und wieder einsammeln

Anwenderhandbuch. ipoint - Server

Anleitung Lernobjekt-Depot (LOD)

Datenübernahme aus Profi-Cash

Zugang zum WLAN eduroam (Campus Essen)

Installation des VPN-Clients unter Windows 7 (32-Bit)

Bei der Installation folgen Sie den Anweisungen des Installations- Assistenten.

2. Die eigenen Benutzerdaten aus orgamax müssen bekannt sein

Installation OMNIKEY 3121 USB

PC-Kaufmann 2014 Neues Buchungsjahr anlegen

KONFIGURATION DS-WIN-VIEW-STANDALONE

Für die Einrichtung des elektronischen Postfachs melden Sie sich wie gewohnt in unserem Online-Banking auf an.

Installation und Einrichtung egk-lesegeräte

NTT DATA Helpdesk Benutzerhandbuch

Anleitung Hosted Exchange

Transkript:

Übung 8: Semaphore in Java (eigene Implementierung) Ziel der Übung: Diese Übung dient dazu, eine eigene Implementierung einer Semaphore-Klasse in der Programmiersprache Java kennenzulernen. Anschließend wird das Monitoring-Tool JConsole vorgestellt, mit dessen Hilfe u.a. der Speicherverbrauch von Java-Anwendungen analysiert werden kann. Aufgabenstellung: Es wird eine eigene Semaphor-Klasse implementiert (seit Java 1.5 ist auch bereits eine Standard-Semaphor-Implementierung verfügbar 1 ) und mit einer eigenen Testklasse getestet. Importieren Sie zunächst die zur Übung mitgelieferten Source-Files über die Eclipse-Import- Funktion (siehe Übung 05, Seite 1). Die Klasse SemaphorTestClass.java legt eine Instanz der Klasse MySemaphor an und erzeugt anschließend Threads, die einen über die Semaphore geschützten kritischen Abschnitt (in dem nicht viel gemacht wird) betreten und wieder verlassen. Die Aktivitäten der Threads werden auf die Konsole protokolliert. Folgende Aufgaben sind zu erledigen: 1. Versuchen Sie zunächst die Java-Klassen zu verstehen und überprüfen Sie, ob sie richtig übersetzt werden. Es müssen in Eclipse drei.class-dateien erzeugt werden. 2. Bringen Sie das Programm zum Ablauf. Hierzu müssen Sie den Eclipse-Menüpunkt Run benutzen. Prüfen Sie die Ausgaben des Programms auf die Konsole und vergleichen Sie die Ausgaben mit den im Anhang dieses Dokuments aufgelisteten Ausgaben! Was fällt Ihnen auf? 3. Erhöhen Sie die Anzahl der nebenläufigen Threads (Variable maxthreads) auf einen Wert von 200. Starten Sie anschließend das neu übersetzte Programm und betrachten Sie parallel dazu den Windows-Taskmanager. Suchen Sie im Taskmanager den Java-Prozess, in dem das Programm abläuft (Name = javaw.exe) und stellen Sie die Anzahl der Threads während des Ablaufs fest. Hierzu müssen Sie den Taskmanager entsprechend einstellen (Spalte Threadanzahl ergänzen über Ansicht->Spalten auswählen) Wie viele Threads benutzt der Prozess und wie verändert sich die Anzahl der Threads zur Laufzeit? Wiederholen Sie den Versuch mit einem Semaphorzähler von 2, 3 und 100 und variieren Sie die Anzahl der Threads bis 10.000. Betrachten Sie jeweils die Konsolausgaben! 4. Im bin-verzeichnis der Java-Installation sind neben der Kompiler javac.exe auch noch viele weitere nützliche Tools vorhanden. Eines davon ist die JConsole, eine Swing- 1 Siehe Übung 9 Prof. Dr. Peter Mandl, Georg Lackermair, Mathias Dolag Seite 1/7

Anwendung mit deren Hilfe die JVM überwacht werden kann. Mit JConsole lassen sich unter anderem der Speicherverbrauch, die Anzahl der Threads und viele weitere nützliche Informationen anzeigen. Wechseln Sie dazu in das bin-verzeichnis Ihrer Java-Installation (z.b. C:\Programme\Java\jdk1.6.0_20\bin) und starten Sie das Programm jconsole.exe mit einen Doppelklick. Es müsste folgendes Fenster erscheinen: Wiederholen Sie den Versuch aus Aufgabe 3 mit einem Semaphorzähler von 1 und 10.000 Threads. Nachdem Sie Ihr Java-Programm gestartet haben, wechseln Sie in die Anzeige der JConsole und eröffnen eine neue Verbindung, so wie es auf den Screenshots dargestellt ist. Navigieren Sie sich nun durch die Oberfläche und schauen Sie sich die dargestellten Informationen an. Prof. Dr. Peter Mandl, Georg Lackermair, Mathias Dolag Seite 2/7

Prof. Dr. Peter Mandl, Georg Lackermair, Mathias Dolag Seite 3/7

5. Ein weiteres nützliches Tool, welches sich ebenfalls im bin -Verzeichnis der JDK- Installation befindet, ist Java VisualVM. Mit diesem lassen sich nützliche Statistiken einer laufenden JVM ablesen, wie z. B. Threads, CPU-Auslastung, Garbage Collection - Informationen, etc. Manche dieser Informationen unterstützt das Tool von Haus aus, für andere stehen kostenfreie Plugins zum Download bereit. Insgesamt ist Java VisualVM ein sehr nützliches Tool zur Performance-Analyse. Starten Sie das Programm und doppelklicken Sie im linken Fensterbereich auf VisualVM. Nachfolgend verschaffen Sie sich einen Überblick über die Reiter Overview, Monitor und Threads. Welche Informationen können diesen entnommen werden? Allgemein sind im linken Bereich alle laufenden JVMs zu sehen. Zu jeder können via Doppelklick Informationen abgerufen werden. Es ist dabei auch möglich, JVMs auf entfernten Servern zu betrachten. In unserem Fall sind jedoch nur die lokalen JVMs, wie z. B. Ihr Java-Programm, interessant. Wiederholen Sie nun erneut den Versuch aus Aufgabe 3 mit einem Semaphorzähler von 1 und 10.000 Threads. Betrachten Sie parallel dazu die Ausgaben in Java VisualVM. Verbinden Sie sich hierzu nach dem Start Ihres Java-Programms auf die neue lokale Applikation und betrachten Sie o.g. Reiter. Prof. Dr. Peter Mandl, Georg Lackermair, Mathias Dolag Seite 4/7

Anhang: Programmausgabe auf Konsole Verwendet wurde eine Semaphore mit Semaphorzähler = 1 und 20 nebenläufige Threads: main: Start des Tests MyThread_1 gestartet MyThread_2 gestartet MyThread_3 gestartet MyThread_4 gestartet MyThread_5 gestartet MyThread_1 im kritischen Abschnitt MyThread_2 muss in P()-Operation warten MyThread_2 Es warten derzeit 1 Threads MyThread_3 muss in P()-Operation warten MyThread_3 Es warten derzeit 2 Threads MyThread_4 muss in P()-Operation warten MyThread_4 Es warten derzeit 3 Threads MyThread_5 muss in P()-Operation warten MyThread_5 Es warten derzeit 4 Threads MyThread_6 gestartet MyThread_7 gestartet MyThread_8 gestartet MyThread_9 gestartet MyThread_10 gestartet MyThread_11 gestartet MyThread_6 muss in P()-Operation warten MyThread_6 Es warten derzeit 5 Threads MyThread_7 muss in P()-Operation warten MyThread_7 Es warten derzeit 6 Threads MyThread_8 muss in P()-Operation warten MyThread_8 Es warten derzeit 7 Threads MyThread_9 muss in P()-Operation warten MyThread_9 Es warten derzeit 8 Threads MyThread_10 muss in P()-Operation warten MyThread_10 Es warten derzeit 9 Threads MyThread_11 muss in P()-Operation warten MyThread_11 Es warten derzeit 10 Threads MyThread_12 gestartet MyThread_13 gestartet MyThread_14 gestartet MyThread_15 gestartet MyThread_16 gestartet MyThread_12 muss in P()-Operation warten MyThread_12 Es warten derzeit 11 Threads MyThread_13 muss in P()-Operation warten MyThread_13 Es warten derzeit 12 Threads MyThread_14 muss in P()-Operation warten MyThread_14 Es warten derzeit 13 Threads MyThread_15 muss in P()-Operation warten MyThread_15 Es warten derzeit 14 Threads MyThread_16 muss in P()-Operation warten MyThread_16 Es warten derzeit 15 Threads MyThread_17 gestartet MyThread_18 gestartet MyThread_19 gestartet MyThread_20 gestartet MyThread_17 muss in P()-Operation warten MyThread_17 Es warten derzeit 16 Threads MyThread_18 muss in P()-Operation warten MyThread_18 Es warten derzeit 17 Threads MyThread_19 muss in P()-Operation warten MyThread_19 Es warten derzeit 18 Threads MyThread_20 muss in P()-Operation warten MyThread_20 Es warten derzeit 19 Threads MyThread_1 verlässt kritischen Abschnitt MyThread_1 V()-Operation ausgeführt, andere Threads dürfen wieder Prof. Dr. Peter Mandl, Georg Lackermair, Mathias Dolag Seite 5/7

MyThread_1 In V()-Operation, es warten derzeit 19 Threads MyThread_2 in P-Operation(), zurück aus wait; es warten derzeit 19 Threads MyThread_2 im kritischen Abschnitt MyThread_2 verlässt kritischen Abschnitt MyThread_2 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_2 In V()-Operation, es warten derzeit 18 Threads MyThread_3 in P-Operation(), zurück aus wait; es warten derzeit 18 Threads MyThread_3 im kritischen Abschnitt MyThread_3 verlässt kritischen Abschnitt MyThread_3 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_3 In V()-Operation, es warten derzeit 17 Threads MyThread_4 in P-Operation(), zurück aus wait; es warten derzeit 17 Threads MyThread_4 im kritischen Abschnitt MyThread_4 verlässt kritischen Abschnitt MyThread_4 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_4 In V()-Operation, es warten derzeit 16 Threads MyThread_5 in P-Operation(), zurück aus wait; es warten derzeit 16 Threads MyThread_5 im kritischen Abschnitt MyThread_5 verlässt kritischen Abschnitt MyThread_5 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_5 In V()-Operation, es warten derzeit 15 Threads MyThread_6 in P-Operation(), zurück aus wait; es warten derzeit 15 Threads MyThread_6 im kritischen Abschnitt MyThread_6 verlässt kritischen Abschnitt MyThread_6 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_6 In V()-Operation, es warten derzeit 14 Threads MyThread_7 in P-Operation(), zurück aus wait; es warten derzeit 14 Threads MyThread_7 im kritischen Abschnitt MyThread_7 verlässt kritischen Abschnitt MyThread_7 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_7 In V()-Operation, es warten derzeit 13 Threads MyThread_8 in P-Operation(), zurück aus wait; es warten derzeit 13 Threads MyThread_8 im kritischen Abschnitt MyThread_8 verlässt kritischen Abschnitt MyThread_8 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_8 In V()-Operation, es warten derzeit 12 Threads MyThread_9 in P-Operation(), zurück aus wait; es warten derzeit 12 Threads MyThread_9 im kritischen Abschnitt MyThread_9 verlässt kritischen Abschnitt MyThread_9 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_9 In V()-Operation, es warten derzeit 11 Threads MyThread_10 in P-Operation(), zurück aus wait; es warten derzeit 11 Threads MyThread_10 im kritischen Abschnitt MyThread_10 verlässt kritischen Abschnitt MyThread_10 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_10 In V()-Operation, es warten derzeit 10 Threads MyThread_11 in P-Operation(), zurück aus wait; es warten derzeit 10 Threads MyThread_11 im kritischen Abschnitt MyThread_11 verlässt kritischen Abschnitt MyThread_11 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_11 In V()-Operation, es warten derzeit 9 Threads MyThread_12 in P-Operation(), zurück aus wait; es warten derzeit 9 Threads MyThread_12 im kritischen Abschnitt MyThread_12 verlässt kritischen Abschnitt MyThread_12 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_12 In V()-Operation, es warten derzeit 8 Threads MyThread_13 in P-Operation(), zurück aus wait; es warten derzeit 8 Threads MyThread_13 im kritischen Abschnitt MyThread_13 verlässt kritischen Abschnitt MyThread_13 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_13 In V()-Operation, es warten derzeit 7 Threads MyThread_14 in P-Operation(), zurück aus wait; es warten derzeit 7 Threads MyThread_14 im kritischen Abschnitt MyThread_14 verlässt kritischen Abschnitt MyThread_14 V()-Operation ausgeführt, andere Threads dürfen wieder Prof. Dr. Peter Mandl, Georg Lackermair, Mathias Dolag Seite 6/7

MyThread_14 In V()-Operation, es warten derzeit 6 Threads MyThread_15 in P-Operation(), zurück aus wait; es warten derzeit 6 Threads MyThread_15 im kritischen Abschnitt MyThread_15 verlässt kritischen Abschnitt MyThread_15 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_15 In V()-Operation, es warten derzeit 5 Threads MyThread_16 in P-Operation(), zurück aus wait; es warten derzeit 5 Threads MyThread_16 im kritischen Abschnitt MyThread_16 verlässt kritischen Abschnitt MyThread_16 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_16 In V()-Operation, es warten derzeit 4 Threads MyThread_17 in P-Operation(), zurück aus wait; es warten derzeit 4 Threads MyThread_17 im kritischen Abschnitt MyThread_17 verlässt kritischen Abschnitt MyThread_17 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_17 In V()-Operation, es warten derzeit 3 Threads MyThread_18 in P-Operation(), zurück aus wait; es warten derzeit 3 Threads MyThread_18 im kritischen Abschnitt MyThread_18 verlässt kritischen Abschnitt MyThread_18 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_18 In V()-Operation, es warten derzeit 2 Threads MyThread_19 in P-Operation(), zurück aus wait; es warten derzeit 2 Threads MyThread_19 im kritischen Abschnitt MyThread_19 verlässt kritischen Abschnitt MyThread_19 V()-Operation ausgeführt, andere Threads dürfen wieder MyThread_19 In V()-Operation, es warten derzeit 1 Threads MyThread_20 in P-Operation(), zurück aus wait; es warten derzeit 1 Threads MyThread_20 im kritischen Abschnitt MyThread_20 verlässt kritischen Abschnitt main: Programmende Prof. Dr. Peter Mandl, Georg Lackermair, Mathias Dolag Seite 7/7