Sie sind hier
E-Book

Parallele und verteilte Anwendungen in Java

AutorRainer Oechsle
VerlagCarl Hanser Fachbuchverlag
Erscheinungsjahr2018
Seitenanzahl472 Seiten
ISBN9783446456037
FormatPDF/ePUB
KopierschutzWasserzeichen
GerätePC/MAC/eReader/Tablet
Preis34,99 EUR

Das Standardwerk zu Parallelität und Verteilung
Für Nutzer ist es selbstverständlich, dass sie mehrere Programme gleichzeitig verwenden können oder dass Programme so komplex sind, dass sie auf mehrere Rechner zugreifen müssen. Aber wie werden solche Anwendungen programmiert?
Das Lehrbuch behandelt zwei eng miteinander verknüpfte Basisthemen der Informatik: die Programmierung paralleler (nebenläufiger) und verteilter Anwendungen. Als Programmiersprache wird Java verwendet. Es werden zunächst anhand zahlreicher Beispiele grundlegende Synchronisationskonzepte für die Programmierung paralleler Abläufe präsentiert. Neben den 'klassischen' Synchronisationsmechanismen von Java werden auch die Konzepte aus der Java-Concurrency-Klassenbibliothek vorgestellt. Weiteres Basiswissen, das zum Verständnis des Buchs notwendig ist, etwa über grafische Benutzeroberflächen, das MVC-Entwurfsmuster oder Rechnernetze, wird im Buch anschaulich und praxisnah vermittelt.
Das Lehrbuch wendet sich an Studierende der Informatik und ingenieurwissenschaftlicher Studiengänge mit Grundkenntnissen in Java und Objektorientierung sowie Softwareentwickler.
Die 5. Auflage wird aktualisiert und um neue Themen ergänzt.

Prof. Dr. Rainer Oechsle ist Professor für Rechnernetze und Verteilte Systeme im Fachbereich Informatik an der Hochschule Trier.

Kaufen Sie hier:

Horizontale Tabs

Leseprobe
1Einleitung

Computer-Nutzer dürften mit großer Wahrscheinlichkeit sowohl mit parallelen Abläufen auf ihrem eigenen Rechner als auch verteilten Anwendungen vertraut sein. So ist jeder Benutzer eines PC heutzutage gewohnt, dass z. B. gleichzeitig eine größere Video-Datei kopiert, ein Musikstück aus einer MP3-Datei abgespielt, ein Java-Programm übersetzt und ein Dokument in einem Editor oder Textverarbeitungsprogramm bearbeitet werden kann. Aufgrund der Tatsache, dass die Mehrzahl der genutzten Computer an das Internet angeschlossen ist, sind heute auch nahezu alle den Umgang mit verteilten Anwendungen wie der elektronischen Post oder dem World Wide Web gewohnt.

Dieses Buch handelt allerdings nicht von der Benutzung, sondern von der Entwicklung paralleler und verteilter Anwendungen mit Java. In diesem ersten einleitenden Kapitel werden zunächst einige wichtige Begriffe wie Parallelität, Nebenläufigkeit, Verteilung, Prozesse und Threads geklärt.

1.1Parallelität, Nebenläufigkeit und Verteilung

Wenn mehrere Vorgänge gleichzeitig auf einem Rechner ablaufen, so sprechen wir von Parallelität oder Nebenläufigkeit (engl. concurrency). Diese Vorgänge können dabei echt gleichzeitig oder nur scheinbar gleichzeitig ablaufen: Wenn ein Rechner mehrere Prozessoren bzw. einen Mehrkernprozessor (Multicore-Prozessor) besitzt, dann ist echte Gleichzeitigkeit möglich. Man spricht in diesem Fall auch von echter Parallelität. Besitzt der Rechner aber nur einen einzigen Prozessor mit einem einzigen Kern, so wird die Gleichzeitigkeit der Abläufe nur vorgetäuscht, indem in sehr hoher Frequenz von einem Vorgang auf den nächsten umgeschaltet wird. Man spricht in diesem Fall von Pseudoparallelität oder Nebenläufigkeit. Die Begriffe Parallelität und Nebenläufigkeit werden in der Literatur nicht einheitlich verwendet: Einige Autoren verwenden den Begriff Nebenläufigkeit als Oberbegriff für echte Parallelität und Pseudoparallelität, für andere Autoren sind Nebenläufigkeit und Pseudoparallelität Synonyme. In diesem Buch wird der Einfachheit halber nicht zwischen Nebenläufigkeit und Parallelität unterschieden; mit beiden Begriffen sollen sowohl die echte als auch die Pseudoparallelität gemeint sein.

Wenn das gleichzeitige Ablaufen von Vorgängen auf mehreren Rechnern betrachtet wird, wobei die Rechner über ein Rechnernetz gekoppelt sind und darüber miteinander kommunizieren, spricht man von Verteilung (verteilte Systeme, verteilte Anwendungen).

Wir unterscheiden also, ob die Vorgänge auf einem Rechner oder auf mehreren Rechnern gleichzeitig ablaufen; im ersten Fall sprechen wir von Parallelität, im anderen Fall von Verteilung. Die Mehrzahl der Leserinnen und Leser dürfte vermutlich mit dieser Unterscheidung zufrieden sein. In manchen Fällen ist es aber gar nicht so einfach zu entscheiden, ob ein gegebenes System einen einzigen Rechner oder eine Vielzahl von Rechnern darstellt. Betrachten Sie z. B. ein System zur Steuerung von Maschinen, wobei dieses System in einem Schaltschrank untergebracht ist, in dem sich mehrere Einschübe mit Prozessoren befinden. Handelt es sich hier um einen oder um mehrere kommunizierende Rechner? Zur Klärung dieser Frage wollen wir uns hier an die allgemein übliche Unterscheidung zwischen eng und lose gekoppelten Systemen halten: Ein eng gekoppeltes System ist ein Rechnersystem bestehend aus mehreren gekoppelten Prozessoren, wobei diese auf einen gemeinsamen Speicher (Hauptspeicher) zugreifen können. Ein lose gekoppeltes System (auch verteiltes System genannt) besteht aus mehreren gekoppelten Prozessoren ohne gemeinsamen Speicher (Hauptspeicher), die über ein Kommunikationssystem Nachrichten austauschen. Ein eng gekoppeltes System sehen wir als einen einzigen Rechner, während wir ein lose gekoppeltes System als einen Verbund mehrerer Rechner betrachten.

Parallelität und Verteilung schließen sich nicht gegenseitig aus, sondern hängen im Gegenteil eng miteinander zusammen: In einem verteilten System laufen auf jedem einzelnen Rechner mehrere Vorgänge parallel (echt parallel oder pseudoparallel) ab. Wie auch in diesem Buch noch ausführlich diskutiert wird, arbeitet ein Server im Rahmen eines Client-Server-Szenarios häufig parallel, um mehrere Clients gleichzeitig zu bedienen. Außerdem können verteilte Anwendungen, die für den Ablauf auf unterschiedlichen Rechnern vorgesehen sind, im Spezialfall auf einem einzigen Rechner parallel ausgeführt werden.

Sowohl Parallelität als auch Verteilung werden durch Hard- und Software realisiert. Bei der Software spielt das Betriebssystem eine entscheidende Rolle. Das Betriebssystem verteilt u. a. die auf einem Rechner gleichzeitig möglichen Abläufe auf die vorhandenen Prozessoren bzw. die vorhandenen Kerne des Rechners. Auf diese Art vervielfacht also das Betriebssystem die Anzahl der vorhandenen Prozessoren bzw. der vorhandenen Kerne virtuell. Diese Virtualisierung ist eines der wichtigen Prinzipien von Betriebssystemen, die auch für andere Ressourcen realisiert wird. So wird z. B. durch das Konzept des virtuellen Speichers ein größerer Hauptspeicher vorgegaukelt als tatsächlich vorhanden. Erreicht wird dies, indem immer die gerade benötigten Daten vom Hintergrundspeicher (Platte) in den Hauptspeicher transferiert werden.

1.2Programme, Prozesse und Threads

Im Zusammenhang mit Parallelität bzw. Nebenläufigkeit und Verteilung muss zwischen den Begriffen Programm, Prozess und Thread (Ausführungsfaden) unterschieden werden. Da es einen engen Zusammenhang zu den Themen Betriebssysteme, Rechner und verteilte Systeme gibt, sollen alle diese Begriffe anhand einer Metapher verdeutlicht werden:

  • Ein Programm entspricht einem Rezept in einem Kochbuch. Es ist statisch. Es hat keine Wirkung, solange es nicht ausgeführt wird. Dass man von einem Rezept nicht satt wird, ist hinlänglich bekannt.

  • Einen Prozess kann man sich vorstellen als eine Küche und einen Thread als einen Koch. Ein Koch kann nur in einer Küche existieren, aber nie außerhalb davon. Umgekehrt muss sich in einer Küche immer mindestens ein Koch befinden. Alle Köche gehen streng nach Rezepten vor, wobei unterschiedliche Köche nach demselben oder nach unterschiedlichen Rezepten kochen können. Jede Küche hat ihre eigenen Pfannen, Schüsseln, Herde, Waschbecken, Messer, Gewürze, Lebensmittel usw. Köche in unterschiedlichen Küchen können sich gegenseitig nicht in die Quere kommen, wohl aber die Köche in einer Küche. Diese müssen den Zugriff auf die Materialien und Geräte der Küche koordinieren.

  • Ein Rechner ist in dieser Metapher ein Haus, in dem sich mehrere Küchen befinden.

  • Ein Betriebssystem lässt sich mit einem Hausmeister eines Hauses vergleichen, der dafür sorgt, dass alles funktioniert (z. B. dass immer Strom für den Herd da ist). Der Hausmeister übernimmt u. a. auch die Rolle eines Boten zwischen den Küchen, um Gegenstände oder Informationen zwischen den Küchen auszutauschen. Auch kann er eine Küche durch einen Anbau vergrößern, wenn eine Küche zu klein geworden ist.

Ein verteiltes System besteht entsprechend aus mehreren solcher Häuser mit Küchen, wobei die Hausmeister der einzelnen Häuser z. B. über Telefon oder über hin- und herlaufende Boten untereinander kommunizieren können. Somit können Köche, die in unterschiedlichen Häusern arbeiten, Gegenstände oder Informationen austauschen, indem sie ihre jeweiligen Hausmeister damit beauftragen.

Diese Begriffe und ihre Beziehung sind in Bild 1.1 zusammenfassend dargestellt.

 

 

Bild 1.1 Häuser, Küchen, Köche und Hausmeister als Metapher für Rechner, Prozesse, Threads und Betriebssysteme

Am Beispiel der Programmiersprache Java und der Ausführung von Java-Programmen lässt sich diese Metapher nun auf die Welt der Informatik übertragen:

  • Ein Programm (Kochrezept) ist in einer Datei abgelegt: als Quelltext in einer oder mehreren Java-Dateien und als übersetztes Programm (Byte-Code) in einer oder mehreren Class-Dateien.

  • Zum Ausführen eines Programms mit Hilfe des Kommandos java wird eine JVM (Java Virtual Machine) gestartet. Bei jedem Erteilen des Java-Kommandos wird ein neuer Prozess (Küche) erzeugt. Ein Prozess stellt im Wesentlichen einen Adressraum für den Programmcode und die Daten dar. Der Programmcode, der sich in einer oder mehreren Dateien befindet, wird in den Adressraum des Prozesses geladen. Es ist möglich, mehrere JVMs zu starten, so dass die entsprechenden Prozesse alle gleichzeitig existieren, wobei jeder Prozess seinen eigenen Adressraum besitzt.

  • Jeder Prozess und damit auch jede JVM hat als Aktivitätsträger mindestens einen Thread (Koch). Neben den so genannten Hintergrund-Threads, die z. B. für die Speicherbereinigung (Garbage...

Blick ins Buch
Inhaltsverzeichnis
Vorwort zur 5. Auflage6
Inhalt10
1 Einleitung16
1.1 Parallelität, Nebenläufigkeit und Verteilung16
1.2 Programme, Prozesse und Threads17
2 Grundlegende Synchronisationskonzepte in Java21
2.1 Erzeugung und Start von Java-Threads21
2.1.1 Ableiten der Klasse Thread21
2.1.2 Implementieren der Schnittstelle Runnable23
2.1.3 Einige Beispiele26
2.2 Probleme beim Zugriff auf gemeinsam genutzte Objekte32
2.2.1 Erster Lösungsversuch36
2.2.2 Zweiter Lösungsversuch37
2.3 Synchronized und volatile39
2.3.1 Synchronized-Methoden39
2.3.2 Synchronized-Blöcke40
2.3.3 Wirkung von synchronized42
2.3.4 Notwendigkeit von synchronized43
2.3.5 Volatile44
2.3.6 Regel für die Nutzung von synchronized45
2.4 Ende von Java-Threads46
2.4.1 Asynchrone Beauftragung mit Abfragen der Ergebnisse47
2.4.2 Zwangsweises Beenden von Threads53
2.4.3 Asynchrone Beauftragung mit befristetem Warten58
2.4.4 Asynchrone Beauftragung mit Rückruf (Callback)60
2.4.5 Asynchrone Beauftragung mit Rekursion63
2.5 Wait und notify66
2.5.1 Erster Lösungsversuch67
2.5.2 Zweiter Lösungsversuch68
2.5.3 Dritter Lösungsversuch69
2.5.4 Korrekte und effiziente Lösung mit wait und notify70
2.6 NotifyAll78
2.6.1 Erzeuger-Verbraucher-Problem mit wait und notify79
2.6.2 Erzeuger-Verbraucher-Problem mit wait und notifyAll83
2.6.3 Faires Parkhaus mit wait und notifyAll85
2.7 Prioritäten von Threads87
2.8 Thread-Gruppen94
2.9 Vordergrund- und Hintergrund-Threads99
2.10 Weitere „gute“ und „schlechte“ Thread-Methoden100
2.11 Thread-lokale Daten102
2.12 Zusammenfassung104
3 Fortgeschrittene Synchronisationskonzepte in Java109
3.1 Semaphore110
3.1.1 Einfache Semaphore110
3.1.2 Einfache Semaphore für den gegenseitigen Ausschluss111
3.1.3 Einfache Semaphore zur Herstellung vorgegebener Ausführungsreihenfolgen113
3.1.4 Additive Semaphore116
3.1.5 Semaphorgruppen119
3.2 Message Queues122
3.2.1 Verallgemeinerung des Erzeuger-Verbraucher-Problems122
3.2.2 Übertragung des erweiterten Erzeuger-Verbraucher-Problems auf Message Queues124
3.3 Pipes127
3.4 Philosophen-Problem130
3.4.1 Lösung mit synchronized – wait – notifyAll131
3.4.2 Naive Lösung mit einfachen Semaphoren133
3.4.3 Einschränkende Lösung mit gegenseitigem Ausschluss135
3.4.4 Gute Lösung mit einfachen Semaphoren136
3.4.5 Lösung mit Semaphorgruppen139
3.5 Leser-Schreiber-Problem141
3.5.1 Lösung mit synchronized – wait – notifyAll142
3.5.2 Lösung mit additiven Semaphoren146
3.6 Schablonen zur Nutzung der Synchronisationsprimitive und Konsistenzbetrachtungen147
3.7 Concurrent-Klassenbibliothek aus Java 5151
3.7.1 Executors152
3.7.2 Locks und Conditions158
3.7.3 Atomic-Klassen166
3.7.4 Synchronisationsklassen170
3.7.5 Queues173
3.8 Das Fork-Join-Framework von Java 7174
3.8.1 Grenzen von ThreadPoolExecutor174
3.8.2 ForkJoinPool und RecursiveTask176
3.8.3 Beispiel zur Nutzung des Fork-Join-Frameworks178
3.9 Das Data-Streaming-Framework von Java 8181
3.9.1 Einleitendes Beispiel181
3.9.2 Sequenzielles Data-Streaming183
3.9.3 Paralleles Data-Streaming187
3.10 Die Completable Futures von Java 8188
3.11 Ursachen für Verklemmungen195
3.11.1 Beispiele für Verklemmungen mit synchronized196
3.11.2 Beispiele für Verklemmungen mit Semaphoren199
3.11.3 Bedingungen für das Eintreten von Verklemmungen200
3.12 Vermeidung von Verklemmungen201
3.12.1 Anforderung von Betriebsmitteln „auf einen Schlag“204
3.12.2 Anforderung von Betriebsmitteln gemäß einer vorgegebenen Ordnung205
3.12.3 Weitere Verfahren206
3.13 Zusammenfassung208
4 Parallelität und grafische Benutzeroberflächen210
4.1 Einführung in die Programmierung grafischer Benutzeroberflächen mit JavaFX211
4.1.1 Allgemeines zu grafischen Benutzeroberflächen211
4.1.2 Erstes JavaFX-Beispiel212
4.1.3 Ereignisbehandlung213
4.2 Properties, Bindings und JavaFX-Collections217
4.2.1 Properties217
4.2.2 Bindings220
4.2.3 JavaFX-Collections222
4.3 Elemente von JavaFX222
4.3.1 Container222
4.3.2 Interaktionselemente225
4.3.3 Grafikprogrammierung227
4.3.4 Weitere Funktionen von JavaFX233
4.4 MVP234
4.4.1 Prinzip von MVP235
4.4.2 Beispiel zu MVP236
4.5 Threads und JavaFX243
4.5.1 Threads für JavaFX243
4.5.2 Länger dauernde Ereignisbehandlungen244
4.5.3 Beispiel Stoppuhr249
4.5.4 Tasks und Services in JavaFX255
4.6 Zusammenfassung264
5 Verteilte Anwendungen mit Sockets265
5.1 Einführung in das Themengebiet der Rechnernetze266
5.1.1 Schichtenmodell266
5.1.2 IP-Adressen und DNS-Namen270
5.1.3 Das Transportprotokoll UDP271
5.1.4 Das Transportprotokoll TCP272
5.2 Socket-Schnittstelle273
5.2.1 Socket-Schnittstelle zu UDP273
5.2.2 Socket-Schnittstelle zu TCP275
5.2.3 Socket-Schnittstelle für Java277
5.3 Kommunikation über UDP mit Java-Sockets278
5.4 Multicast-Kommunikation mit Java-Sockets287
5.5 Kommunikation über TCP mit Java-Sockets291
5.6 Sequenzielle und parallele Server301
5.6.1 TCP-Server mit dynamischer Parallelität302
5.6.2 TCP-Server mit statischer Parallelität306
5.6.3 Sequenzieller, „verzahnt“ arbeitender TCP-Server311
5.7 Zusammenfassung315
6 Verteilte Anwendungen mit RMI316
6.1 Prinzip von RMI316
6.2 Einführendes RMI-Beispiel319
6.2.1 Basisprogramm319
6.2.2 RMI-Client mit grafischer Benutzeroberfläche323
6.2.3 RMI-Registry328
6.3 Parallelität bei RMI-Methodenaufrufen332
6.4 Wertübergabe für Parameter und Rückgabewerte336
6.4.1 Serialisierung und Deserialisierung von Objekten337
6.4.2 Serialisierung und Deserialisierung bei RMI342
6.5 Referenzübergabe für Parameter und Rückgabewerte346
6.6 Transformation lokaler in verteilte Anwendungen361
6.6.1 Rechnergrenzen überschreitende Synchronisation mit RMI361
6.6.2 Asynchrone Kommunikation mit RMI364
6.6.3 Verteilte MVP-Anwendungen mit RMI365
6.7 Dynamisches Umschalten zwischen Wert- und Referenzübergabe – Migration von Objekten366
6.7.1 Das Exportieren und „Unexportieren“ von Objekten366
6.7.2 Migration von Objekten369
6.7.3 Eintrag eines Nicht-Stub-Objekts in die RMI-Registry376
6.8 Laden von Klassen über das Netz377
6.9 Realisierung von Stubs und Skeletons378
6.9.1 Realisierung von Skeletons379
6.9.2 Realisierung von Stubs379
6.10 Verschiedenes382
6.11 Zusammenfassung383
7 Webbasierte Anwendungen mit Servlets und JSF384
7.1 HTTP und HTML385
7.1.1 GET385
7.1.2 Formulare in HTML388
7.1.3 POST390
7.1.4 Format von HTTP-Anfragen und -Antworten391
7.2 Einführende Servlet-Beispiele392
7.2.1 Allgemeine Vorgehensweise392
7.2.2 Erstes Servlet-Beispiel393
7.2.3 Zugriff auf Formulardaten395
7.2.4 Zugriff auf die Daten der HTTP-Anfrage und -Antwort397
7.3 Parallelität bei Servlets398
7.3.1 Demonstration der Parallelität von Servlets398
7.3.2 Paralleler Zugriff auf Daten400
7.3.3 Anwendungsglobale Daten404
7.4 Sessions und Cookies407
7.4.1 Sessions408
7.4.2 Realisierung von Sessions mit Cookies412
7.4.3 Direkter Zugriff auf Cookies414
7.4.4 Servlets mit länger dauernden Aufträgen415
7.5 Asynchrone Servlets421
7.6 Filter425
7.7 Übertragung von Dateien mit Servlets426
7.7.1 Herunterladen von Dateien426
7.7.2 Hochladen von Dateien429
7.8 JSF (Java Server Faces)432
7.8.1 Einführendes Beispiel432
7.8.2 Managed Beans und deren Scopes439
7.8.3 MVP-Prinzip mit JSF443
7.8.4 AJAX mit JSF444
7.9 RESTful WebServices448
7.9.1 Definition von RESTful WebServices449
7.9.2 JSON450
7.9.3 Beispiel452
7.10 WebSockets457
7.11 Zusammenfassung461
Literatur464
Index466

Weitere E-Books zum Thema: Programmiersprachen - Softwareentwicklung

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

Programmieren lernen in PHP 5

E-Book Programmieren lernen in PHP 5
Format: PDF

Mit der Version 5 erreicht PHP einen bemerkenswerten Reifegrad, der PHP zu einer festen Größe in der Welt der Webprogrammierung macht. Gerade die leichte Erlernbarkeit macht PHP zur idealen…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Weitere Zeitschriften

Menschen. Inklusiv leben

Menschen. Inklusiv leben

MENSCHEN. das magazin informiert über Themen, die das Zusammenleben von Menschen in der Gesellschaft bestimmen -und dies konsequent aus Perspektive der Betroffenen. Die Menschen, um die es geht, ...

arznei-telegramm

arznei-telegramm

Das arznei-telegramm® informiert bereits im 53. Jahrgang Ärzte, Apotheker und andere Heilberufe über Nutzen und Risiken von Arzneimitteln. Das arznei-telegramm®  ist neutral und ...

Augenblick mal

Augenblick mal

Die Zeitschrift mit den guten Nachrichten "Augenblick mal" ist eine Zeitschrift, die in aktuellen Berichten, Interviews und Reportagen die biblische Botschaft und den christlichen Glauben ...

AUTOCAD Magazin

AUTOCAD Magazin

Die herstellerunabhängige Fachzeitschrift wendet sich an alle Anwender und Entscheider, die mit Softwarelösungen von Autodesk arbeiten. Das Magazin gibt praktische ...

Das Hauseigentum

Das Hauseigentum

Das Hauseigentum. Organ des Landesverbandes Haus & Grund Brandenburg. Speziell für die neuen Bundesländer, mit regionalem Schwerpunkt Brandenburg. Systematische Grundlagenvermittlung, viele ...

DER PRAKTIKER

DER PRAKTIKER

Technische Fachzeitschrift aus der Praxis für die Praxis in allen Bereichen des Handwerks und der Industrie. “der praktiker“ ist die Fachzeitschrift für alle Bereiche der fügetechnischen ...

die horen

die horen

Zeitschrift für Literatur, Kunst und Kritik."...weil sie mit großer Aufmerksamkeit die internationale Literatur beobachtet und vorstellt; weil sie in der deutschen Literatur nicht nur das Neueste ...