Java.tex 4.9 KB

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