Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

📚 The CoCalc Library - books, templates and other resources

132928 views
License: OTHER
1
%!TEX root = Programmierparadigmen.tex
2
\chapter{Java}
3
\index{Java|(}
4
5
Im Folgenden wird in aller Kürze erklärt, wie man in Java Programme schreibt,
6
die auf mehreren Prozessoren laufen.
7
8
\section{Thread, ThreadPool, Runnable und ExecutorService}
9
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10
\texttt{Interface Runnable}\xindex{Runnable}\\
11
\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.lang.Thread}%
12
\begin{itemize}
13
\item Methods:
14
\begin{itemize}
15
\item \texttt{void run()}: When an object implementing interface
16
Runnable is used to create a thread, starting the thread causes the
17
object's run method to be called in that separately executing thread.
18
\end{itemize}
19
\end{itemize}
20
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
21
\texttt{Class Thread}\xindex{Thread}\\
22
\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.lang.Thread}%
23
\begin{itemize}
24
\item implements Runnable
25
\end{itemize}
26
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27
\texttt{Class ThreadPoolExecutor}\xindex{ThreadPoolExecutor}\\
28
\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.util.concurrent.ThreadPoolExecutor}
29
30
31
\begin{beispiel}[ExecutorService, Future\footnotemark]
32
\inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/executer-service-future-example.java}
33
\end{beispiel}
34
\footnotetext{WS 2013/2014, Kapitel 41, Folie 28}
35
36
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
37
\texttt{Interface Callable<V>}\xindex{Callable}\\
38
\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.util.concurrent}
39
\begin{itemize}
40
\item Parameter:
41
\begin{itemize}
42
\item \texttt{V} - the result type of method \texttt{call()}
43
\end{itemize}
44
\item Ermöglicht die Rückgabe von Ergebnissen
45
\end{itemize}
46
47
\begin{beispiel}[Callable\footnotemark]
48
\inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/callable-example.java}
49
\end{beispiel}
50
\footnotetext{WS 2013/2014, Kapitel 41, Folie 27}
51
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
52
\section{Futures}\xindex{Future}\index{Promise|see{Future}}
53
\enquote{Ein Future (engl. \enquote{Zukunft}) oder ein Promise (engl. \enquote{Versprechen}) bezeichnet in der Programmierung einen Platzhalter (Proxy) für ein Ergebnis, das noch nicht bekannt ist, meist weil seine Berechnung noch nicht abgeschlossen ist.}
54
55
\texttt{Interface Future<V>}\xindex{Future}\\
56
\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.util.concurrent}
57
58
59
\begin{itemize}
60
\item \textbf{Parameter}:
61
\begin{itemize}
62
\item \texttt{V}: The result type returned by this Future's get method
63
\end{itemize}
64
\item Erlauben die Rückgabe von Ergebnissen
65
\end{itemize}
66
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67
68
\textbf{Beispiel}:
69
% Zu lang, geht das kürzer?
70
%\inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/matrix-multiplication.java}
71
\begin{beispiel}[Runnable, ExecutorService, ThreadPool\footnotemark]
72
\inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/vorlesung-futures-basics.java}
73
\end{beispiel}
74
\footnotetext{WS 2013/2014, Kapitel 41, Folie 26}
75
76
\section{Beispiele}
77
78
Die folgenden Quelltexte wurden von Axel Busch erstellt.
79
80
Das folgende Programm läuft in ca. 4min und $\SI{36}{\second}$ Sekunden auf einem Kern einer
81
Intel Pentium P6200 CPU:
82
83
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=SingleCorePrimeTest.java]{java}{scripts/java/SingleCorePrimeTest.java}
84
85
Der folgende Code Testet das ganze mit mehreren Kernen auf einer Intel Pentium
86
P6200 CPU:
87
\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=MultipleCorePrimeTest.java]{java}{scripts/java/MultipleCorePrimeTest.java}
88
89
\begin{itemize}
90
\item 1 thread: 4min 38s
91
\item 2 threads: 3min 14s
92
\item 4 threads: 2min 44s
93
\item 8 threads: 2min 41s
94
\end{itemize}
95
96
\section{Literatur}
97
\begin{itemize}
98
\item \href{http://openbook.galileocomputing.de/javainsel9/javainsel_14_004.htm}{Java ist auch eine Insel}: Kapitel 14 -
99
Threads und nebenläufige Programmierung
100
\item \href{http://www.vogella.com/tutorials/JavaConcurrency/article.html}{vogella.com}: Java concurrency (multi-threading) - Tutorial
101
\item Links zur offiziellen Java 8 Dokumentation:
102
\begin{itemize}
103
\item \href{http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html}{ThreadPoolExecutor}
104
\item \href{http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html}{Runnable}
105
\item \href{http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html}{Thread}
106
\item \href{http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html}{Callable}
107
\item \href{http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html}{Future}
108
\end{itemize}
109
\end{itemize}
110
111
\index{Java|)}
112