diff --git a/documents/Programmierparadigmen/Java.tex b/documents/Programmierparadigmen/Java.tex index b0427fd..64226ad 100644 --- a/documents/Programmierparadigmen/Java.tex +++ b/documents/Programmierparadigmen/Java.tex @@ -5,10 +5,10 @@ Im Folgenden wird in aller Kürze erklärt, wie man in Java Programme schreibt, die auf mehreren Prozessoren laufen. -\section{Thread, ThreadPool und Runnable} +\section{Thread, ThreadPool, Runnable und ExecutorService} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\texttt{Interface Runnable}\\ -\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.lang.Thread}\xindex{Runnable}% +\texttt{Interface Runnable}\xindex{Runnable}\\ +\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.lang.Thread}% \begin{itemize} \item Methods: \begin{itemize} @@ -18,20 +18,36 @@ die auf mehreren Prozessoren laufen. \end{itemize} \end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\texttt{Class Thread}\\ -\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.lang.Thread}\xindex{Thread}% +\texttt{Class Thread}\xindex{Thread}\\ +\-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.lang.Thread}% \begin{itemize} \item implements Runnable \end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \texttt{Class ThreadPoolExecutor}\xindex{ThreadPoolExecutor}\\ \-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.util.concurrent.ThreadPoolExecutor} + + +\begin{beispiel}[ExecutorService, Future\footnotemark] + \inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/executer-service-future-example.java} +\end{beispiel} +\footnotetext{WS 2013/2014, Kapitel 41, Folie 28} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \texttt{Interface Callable}\xindex{Callable}\\ \-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.util.concurrent} \begin{itemize} - \item Parameter: \texttt{V} - the result type of method call + \item Parameter: + \begin{itemize} + \item \texttt{V} - the result type of method \texttt{call()} + \end{itemize} + \item Ermöglicht die Rückgabe von Ergebnissen \end{itemize} + +\begin{beispiel}[Callable\footnotemark] + \inputminted[numbersep=5pt, tabsize=4]{java}{scripts/java/callable-example.java} +\end{beispiel} +\footnotetext{WS 2013/2014, Kapitel 41, Folie 27} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Futures}\xindex{Future}\index{Promise|see{Future}} \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.} @@ -39,9 +55,13 @@ die auf mehreren Prozessoren laufen. \texttt{Interface Future}\xindex{Future}\\ \-\hspace{0.8cm}$\leftharpoonup$ \texttt{java.util.concurrent} -\textbf{Parameter}: + \begin{itemize} - \item \texttt{V}: The result type returned by this Future's get method + \item \textbf{Parameter}: + \begin{itemize} + \item \texttt{V}: The result type returned by this Future's get method + \end{itemize} + \item Erlauben die Rückgabe von Ergebnissen \end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/documents/Programmierparadigmen/Programmierparadigmen.pdf b/documents/Programmierparadigmen/Programmierparadigmen.pdf index f9e3665..63a541c 100644 Binary files a/documents/Programmierparadigmen/Programmierparadigmen.pdf and b/documents/Programmierparadigmen/Programmierparadigmen.pdf differ diff --git a/documents/Programmierparadigmen/scripts/java/callable-example.java b/documents/Programmierparadigmen/scripts/java/callable-example.java new file mode 100644 index 0000000..ff874d5 --- /dev/null +++ b/documents/Programmierparadigmen/scripts/java/callable-example.java @@ -0,0 +1,9 @@ +public final class StringTask implements Callable { + int id; + public StringTask(int id) { + this.id = id; + } + public String call() { + return "Run " + id; + } +} \ No newline at end of file diff --git a/documents/Programmierparadigmen/scripts/java/executer-service-future-example.java b/documents/Programmierparadigmen/scripts/java/executer-service-future-example.java new file mode 100644 index 0000000..412763d --- /dev/null +++ b/documents/Programmierparadigmen/scripts/java/executer-service-future-example.java @@ -0,0 +1,18 @@ +public static void main(String[] args) throws + InterruptedException, ExecutionException { + ExecutorService pool = + Executors.newFixedThreadPool(4); + List> futures = + new ArrayList>(); + + for(int i = 0; i < 10; i++) { + futures.add(pool.submit(new StringTask(i))); + } + + for(Future future : futures){ + String result = future.get(); + System.out.println(result); + } + + pool.shutdown(); +} \ No newline at end of file