{"id":49,"date":"2023-09-27T11:19:00","date_gmt":"2023-09-27T10:19:00","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=49"},"modified":"2024-01-08T09:15:29","modified_gmt":"2024-01-08T08:15:29","slug":"multithreading-in-java-eine-einfuehrung","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=49","title":{"rendered":"Multithreading in Java: Eine Einf\u00fchrung"},"content":{"rendered":"\n<p>Eine der leistungsstarken Funktionen von Java ist die Unterst\u00fctzung von Multithreading, die es erm\u00f6glicht, mehrere Threads innerhalb eines Programms auszuf\u00fchren. Dieser Artikel bietet eine umfassende Einf\u00fchrung in die Nutzung von Threads in Java, vom Erstellen und Starten bis hin zu bew\u00e4hrten Strategien f\u00fcr ein sicheres Beenden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Threads in Java erstellen und starten<\/strong><\/h3>\n\n\n\n<p>Ein Thread repr\u00e4sentiert eine unabh\u00e4ngige Ausf\u00fchrungseinheit innerhalb eines Programms. In Java k\u00f6nnen Threads auf zwei Arten erstellt werden: durch Verl\u00e4ngerung der <code>Thread<\/code>-Klasse oder durch Implementierung des <code>Runnable<\/code>-Interfaces.<\/p>\n\n\n\n<p><strong>1. Verl\u00e4ngerung der Thread-Klasse:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MeinThread<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Thread<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> void run() {\n        <span class=\"hljs-comment\">\/\/ Code, der im Thread ausgef\u00fchrt werden soll<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Um den Thread zu starten, erstellen Sie eine Instanz der Klasse und rufen Sie die Methode <code>start()<\/code> auf:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">MeinThread meinThread = <span class=\"hljs-keyword\">new<\/span> MeinThread();\nmeinThread.start();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>2. Implementierung des Runnable-Interfaces:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MeinRunnable<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">Runnable<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> void run() {\n        <span class=\"hljs-comment\">\/\/ Code, der im Thread ausgef\u00fchrt werden soll<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Um den Thread zu starten, erstellen Sie eine Instanz der Klasse, erstellen Sie dann eine <code>Thread<\/code>-Instanz und \u00fcbergeben Sie Ihr <code>Runnable<\/code>-Objekt:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">MeinRunnable meinRunnable = <span class=\"hljs-keyword\">new<\/span> MeinRunnable();\nThread meinThread = <span class=\"hljs-keyword\">new<\/span> Thread(meinRunnable);\nmeinThread.start();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Beide Ans\u00e4tze f\u00fchren dazu, dass der <code>run()<\/code>-Code in einem separaten Thread ausgef\u00fchrt wird.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Beenden von Threads in Java<\/strong><\/h3>\n\n\n\n<p>Das ordnungsgem\u00e4\u00dfe Beenden von Threads ist entscheidend, um Ressourcen freizugeben und ein reibungsloses Programmverhalten sicherzustellen. Java bietet mehrere Mechanismen zum Beenden von Threads.<\/p>\n\n\n\n<p><strong>1. Verwendung eines &#8222;kill flags&#8220;:<\/strong><\/p>\n\n\n\n<p>Ein h\u00e4ufiger Ansatz besteht darin, einen sogenannten &#8222;kill flag&#8220; zu verwenden, der von einem anderen Thread gesetzt wird, um anzuzeigen, dass der aktuelle Thread beendet werden soll. Der laufende Thread sollte regelm\u00e4\u00dfig diesen Flag \u00fcberpr\u00fcfen und seine Ausf\u00fchrung beenden, wenn das Flag gesetzt ist.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MeinThread<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Thread<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> volatile boolean shouldStop = <span class=\"hljs-keyword\">false<\/span>;\n\n    <span class=\"hljs-keyword\">public<\/span> void run() {\n        <span class=\"hljs-keyword\">while<\/span> (!shouldStop) {\n            <span class=\"hljs-comment\">\/\/ Code, der im Thread ausgef\u00fchrt wird<\/span>\n        }\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> void stopThread() {\n        shouldStop = <span class=\"hljs-keyword\">true<\/span>;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Der Aufruf der Methode <code>stopThread()<\/code> setzt das Flag, und der Thread wird beendet, sobald er die \u00dcberpr\u00fcfung erreicht.<\/p>\n\n\n\n<p><strong>2. Verwendung der <code>interrupt()<\/code>-Methode:<\/strong><\/p>\n\n\n\n<p>Die <code>interrupt()<\/code>-Methode wird verwendet, um einen Thread zu unterbrechen. Der unterbrochene Thread wird jedoch nicht sofort beendet. Stattdessen wird ein Interrupt-Status gesetzt, der vom Thread \u00fcberpr\u00fcft werden kann.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MeinThread<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Thread<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> void run() {\n        <span class=\"hljs-keyword\">while<\/span> (!Thread.interrupted()) {\n            <span class=\"hljs-comment\">\/\/ Code, der im Thread ausgef\u00fchrt wird<\/span>\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Um den Thread zu unterbrechen, rufen Sie <code>meinThread.interrupt()<\/code> auf. Der Thread \u00fcberpr\u00fcft dann seinen Interrupt-Status und beendet sich, wenn er unterbrochen wurde.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Individuelles Benennen von Threads<\/strong><\/h3>\n\n\n\n<p>Das Benennen von Threads ist besonders n\u00fctzlich, um Threads in einem Programm zu identifizieren und zu debuggen. Threads k\u00f6nnen beim Erstellen benannt werden, indem Sie entweder den Konstruktor der <code>Thread<\/code>-Klasse mit einem Namen aufrufen oder die <code>setName()<\/code>-Methode verwenden.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Thread meinThread = <span class=\"hljs-keyword\">new<\/span> Thread(<span class=\"hljs-string\">\"MeinThread\"<\/span>);\n<span class=\"hljs-comment\">\/\/ oder<\/span>\nThread meinThread = <span class=\"hljs-keyword\">new<\/span> Thread();\nmeinThread.setName(<span class=\"hljs-string\">\"MeinThread\"<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Die Verwendung von aussagekr\u00e4ftigen Namen erleichtert die Analyse von Thread-Dumps und das Auffinden von Problemen in komplexen Anwendungen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Fazit<\/strong><\/h3>\n\n\n\n<p>Die Nutzung von Threads in Java erm\u00f6glicht die gleichzeitige Ausf\u00fchrung von Aufgaben und kann die Leistung und Reaktionsf\u00e4higkeit von Anwendungen verbessern. Es ist wichtig, Threads sicher zu erstellen, zu starten und zu beenden, um potenzielle Probleme wie Ressourcenlecks oder unerwartetes Verhalten zu vermeiden. Die Verwendung von &#8222;kill flags&#8220; und der <code>interrupt()<\/code>-Methode sind bew\u00e4hrte Strategien, um Threads effizient zu beenden. Die individuelle Benennung von Threads erleichtert die Identifizierung und das Debugging von Threads in komplexen Anwendungen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine der leistungsstarken Funktionen von Java ist die Unterst\u00fctzung von Multithreading, die es erm\u00f6glicht, mehrere Threads innerhalb eines Programms auszuf\u00fchren. Dieser Artikel bietet eine umfassende Einf\u00fchrung in die Nutzung von Threads in Java, vom Erstellen und Starten bis hin zu bew\u00e4hrten Strategien f\u00fcr ein sicheres Beenden. Threads in Java erstellen und starten Ein Thread repr\u00e4sentiert [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-49","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/49","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=49"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/49\/revisions"}],"predecessor-version":[{"id":50,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/49\/revisions\/50"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=49"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=49"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=49"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}