📚 The CoCalc Library - books, templates and other resources
License: OTHER
%!TEX root = Programmierparadigmen.tex1\chapter{Java}2\index{Java|(}34Im Folgenden wird in aller Kürze erklärt, wie man in Java Programme schreibt,5die auf mehreren Prozessoren laufen.67\section{Thread, ThreadPool, Runnable und ExecutorService}8%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%9\texttt{Interface Runnable}\xindex{Runnable}\\10\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.lang.Thread}%11\begin{itemize}12\item Methods:13\begin{itemize}14\item \texttt{void run()}: When an object implementing interface15Runnable is used to create a thread, starting the thread causes the16object's run method to be called in that separately executing thread.17\end{itemize}18\end{itemize}19%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%20\texttt{Class Thread}\xindex{Thread}\\21\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.lang.Thread}%22\begin{itemize}23\item implements Runnable24\end{itemize}25%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%26\texttt{Class ThreadPoolExecutor}\xindex{ThreadPoolExecutor}\\27\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.util.concurrent.ThreadPoolExecutor}282930\begin{beispiel}[ExecutorService, Future\footnotemark]31\inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/executer-service-future-example.java}32\end{beispiel}33\footnotetext{WS 2013/2014, Kapitel 41, Folie 28}3435%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36\texttt{Interface Callable<V>}\xindex{Callable}\\37\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.util.concurrent}38\begin{itemize}39\item Parameter:40\begin{itemize}41\item \texttt{V} - the result type of method \texttt{call()}42\end{itemize}43\item Ermöglicht die Rückgabe von Ergebnissen44\end{itemize}4546\begin{beispiel}[Callable\footnotemark]47\inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/callable-example.java}48\end{beispiel}49\footnotetext{WS 2013/2014, Kapitel 41, Folie 27}50%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%51\section{Futures}\xindex{Future}\index{Promise|see{Future}}52\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.}5354\texttt{Interface Future<V>}\xindex{Future}\\55\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.util.concurrent}565758\begin{itemize}59\item \textbf{Parameter}:60\begin{itemize}61\item \texttt{V}: The result type returned by this Future's get method62\end{itemize}63\item Erlauben die Rückgabe von Ergebnissen64\end{itemize}65%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%6667\textbf{Beispiel}:68% Zu lang, geht das kürzer?69%\inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/matrix-multiplication.java}70\begin{beispiel}[Runnable, ExecutorService, ThreadPool\footnotemark]71\inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/vorlesung-futures-basics.java}72\end{beispiel}73\footnotetext{WS 2013/2014, Kapitel 41, Folie 26}7475\section{Beispiele}7677Die folgenden Quelltexte wurden von Axel Busch erstellt.7879Das folgende Programm läuft in ca. 4min und $\SI{36}{\second}$ Sekunden auf einem Kern einer80Intel Pentium P6200 CPU:8182\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=SingleCorePrimeTest.java]{java}{scripts/java/SingleCorePrimeTest.java}8384Der folgende Code Testet das ganze mit mehreren Kernen auf einer Intel Pentium85P6200 CPU:86\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=MultipleCorePrimeTest.java]{java}{scripts/java/MultipleCorePrimeTest.java}8788\begin{itemize}89\item 1 thread: 4min 38s90\item 2 threads: 3min 14s91\item 4 threads: 2min 44s92\item 8 threads: 2min 41s93\end{itemize}9495\section{Literatur}96\begin{itemize}97\item \href{http://openbook.galileocomputing.de/javainsel9/javainsel_14_004.htm}{Java ist auch eine Insel}: Kapitel 14 -98Threads und nebenläufige Programmierung99\item \href{http://www.vogella.com/tutorials/JavaConcurrency/article.html}{vogella.com}: Java concurrency (multi-threading) - Tutorial100\item Links zur offiziellen Java 8 Dokumentation:101\begin{itemize}102\item \href{http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html}{ThreadPoolExecutor}103\item \href{http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html}{Runnable}104\item \href{http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html}{Thread}105\item \href{http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html}{Callable}106\item \href{http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html}{Future}107\end{itemize}108\end{itemize}109110\index{Java|)}111112