{"id":335,"date":"2009-06-14T11:33:07","date_gmt":"2009-06-14T09:33:07","guid":{"rendered":"http:\/\/konstantin.filtschew.de\/blog\/?p=335"},"modified":"2012-09-21T16:16:40","modified_gmt":"2012-09-21T14:16:40","slug":"mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren","status":"publish","type":"post","link":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/","title":{"rendered":"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren"},"content":{"rendered":"<p>Es gibt immer wieder Aufgaben, die sehr lange dauern und sehr gro\u00dfe Mengen an Daten verarbeiten m\u00fcssen. Dabei geht es meistens um Minuten oder gar Stunden, Tage &#8230;<\/p>\n<p>Diese sollten sinnvollerweise parallelisiert werden, um die Leistungs des Systems zu nutzen. Heutige Systeme sind sehr oft Mehrkern- bzw. Mehrprozessorsysteme. Auch ist das GHz-Rennen im Moment zu Ende und die Leistung steigt \u00fcber die Anzahl der Prozessoren bzw. Kerne.<\/p>\n<p>Das folgende Beispiel zeigt wie man unter Java Aufgaben parallel verarbeiten kann, ohne sich gro\u00df den Kopf um die Ausf\u00fchrung zerbrechen zu m\u00fcssen. Der ThreadPoolExecutor ist meiner Meinung nach eine sehr gute M\u00f6glichkeit Aufgaben zu parallelisieren, die Parallel ausgef\u00fchrt werden k\u00f6nnen. Der gro\u00dfe Vorteil ist, dass er Threads f\u00fcr das Abarbeiten am laufen h\u00e4lt. Das bedeutet bei neuen Aufgaben werden normalerweise keine Threads gestartet und somit entf\u00e4llt faktisch dieser Overhead. Threads im Pool werden nur beendet, wenn sie l\u00e4nger als der festgelegte Timeout nicht benutzt werden oder sie vom Programmierer explizit beendet werden.<\/p>\n<p>Nicht erschrecken. Das meiste davon sind Kommentare und Beispielcode.<\/p>\n<p>Ich wei\u00df &#8211; weniger Gelaber und her mit dem Code!<\/p>\n<p>[code]<br \/>\nimport java.util.concurrent.*;<\/p>\n<p>class MyThreadPoolExecutor<br \/>\n{<br \/>\n\t\/\/Parallel running Threads(Executor) on System<br \/>\n    int corePoolSize = 2;<\/p>\n<p>    \/\/Maximum Threads allowed in Pool<br \/>\n    int maxPoolSize = 4;<\/p>\n<p>    \/\/Keep alive time for waiting threads for jobs(Runnable)<br \/>\n    long keepAliveTime = 10;<\/p>\n<p>    \/\/This is the one who manages and start the work<br \/>\n    ThreadPoolExecutor threadPool = null;<\/p>\n<p>    \/\/Working queue for jobs (Runnable). We add them finally here<br \/>\n    final ArrayBlockingQueue workQueue = new ArrayBlockingQueue(5);<\/p>\n<p>    public MyThreadPoolExecutor() {<br \/>\n        threadPool = new ThreadPoolExecutor(corePoolSize, maxPoolSize,<br \/>\n                keepAliveTime, TimeUnit.SECONDS, workQueue);<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Here we add our jobs to working queue<br \/>\n     *<br \/>\n     * @param task a Runnable task<br \/>\n     *\/<br \/>\n    public void runTask(Runnable task) {<br \/>\n        threadPool.execute(task);<br \/>\n        System.out.println(&#8222;Tasks in workQueue..&#8220; + workQueue.size());<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * Shutdown the Threadpool if it&#8217;s finished<br \/>\n     *\/<br \/>\n    public void shutDown() {<br \/>\n        threadPool.shutdown();<br \/>\n    }<\/p>\n<p>    public static void main(String args[]) {<br \/>\n        MyThreadPoolExecutor mtpe = new MyThreadPoolExecutor();<\/p>\n<p>        for (int i= 0; i < 6; i++ ) {\n        \tmtpe.runTask(new WorkerRunnable(i));\n        }\n        \n        mtpe.shutDown();\n        System.out.println(\"Finished! :)\");\n    }\n\n    \/**\n     * This is the one who do the work\n     * \n     * This one is static for accessing from main class\n     *\/\n    private static class WorkerRunnable implements Runnable {\n\n    \t\/\/so we can see which job is running\n    \tprivate int jobNr;\n    \t\n    \t\/**\n    \t * This is for understanding only\n    \t * \n    \t * @param jobNr number for displaying\n    \t *\/\n    \tpublic WorkerRunnable(int jobNr) {\n    \t\tthis.jobNr = jobNr;\n    \t}\n    \t\n\t\t@Override\n\t\tpublic void run() {\n\t\t\tfor(int i  = 0; i < 10; i++) {\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tSystem.out.println(\"Thread \"+jobNr+\" calculated \"+ i);\n\t\t\t\t\tThread.currentThread().sleep(1000);\n\t\t\t\t} catch (InterruptedException ie) {\n\t\t\t\t\tie.printStackTrace();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n    }\n}\n[\/code]\n\nDa in diesem Beispiel die Anzahl der Parallel laufender Threads (<em>corePoolSize) auf statisch 2 begrenzt ist, sollte die Zahl \u00fcber <a title=\"Anzahl Prozessoren bestimmen welche f\u00fcr die Java Virtual Machine (JVM) vom System zur Verf\u00fcgung stehen\" href=\"http:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/anzahl-prozessoren-bestimmen-welche-fuer-die-java-virtual-machine-jvm-vom-system-zur-verfuegung-stehen\/\">Prozessoranzahl (siehe hier)<\/a> bestimmt werden. Auch sollte man nicht vergessen die maximale Anzahl an Threads (<em>maxPoolSize<\/em>) entsprechend anzupassen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt immer wieder Aufgaben, die sehr lange dauern und sehr gro\u00dfe Mengen an Daten verarbeiten m\u00fcssen. Dabei geht es meistens um Minuten oder gar Stunden, Tage &#8230; Diese sollten sinnvollerweise parallelisiert werden, um die Leistungs des Systems zu nutzen. Heutige Systeme sind sehr oft Mehrkern- bzw. Mehrprozessorsysteme. Auch ist das GHz-Rennen im Moment zu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[],"class_list":["post-335","post","type-post","status-publish","format-standard","hentry","category-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren - Konstantin Filtschew<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren - Konstantin Filtschew\" \/>\n<meta property=\"og:description\" content=\"Es gibt immer wieder Aufgaben, die sehr lange dauern und sehr gro\u00dfe Mengen an Daten verarbeiten m\u00fcssen. Dabei geht es meistens um Minuten oder gar Stunden, Tage &#8230; Diese sollten sinnvollerweise parallelisiert werden, um die Leistungs des Systems zu nutzen. Heutige Systeme sind sehr oft Mehrkern- bzw. Mehrprozessorsysteme. Auch ist das GHz-Rennen im Moment zu [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Konstantin Filtschew\" \/>\n<meta property=\"article:published_time\" content=\"2009-06-14T09:33:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-09-21T14:16:40+00:00\" \/>\n<meta name=\"author\" content=\"Konstantin Filtschew\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fa11enangel\" \/>\n<meta name=\"twitter:site\" content=\"@fa11enangel\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Konstantin Filtschew\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"2\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/\"},\"author\":{\"name\":\"Konstantin Filtschew\",\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/de09aadf27dd3b71cb0030f6f2214b1e\"},\"headline\":\"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren\",\"datePublished\":\"2009-06-14T09:33:07+00:00\",\"dateModified\":\"2012-09-21T14:16:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/\"},\"wordCount\":450,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/de09aadf27dd3b71cb0030f6f2214b1e\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/\",\"url\":\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/\",\"name\":\"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren - Konstantin Filtschew\",\"isPartOf\":{\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/#website\"},\"datePublished\":\"2009-06-14T09:33:07+00:00\",\"dateModified\":\"2012-09-21T14:16:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/konstantin.filtschew.de\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/#website\",\"url\":\"https:\/\/konstantin.filtschew.de\/blog\/\",\"name\":\"Konstantin Filtschew\",\"description\":\"Der t\u00e4gliche IT-Wahnsinn\",\"publisher\":{\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/de09aadf27dd3b71cb0030f6f2214b1e\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/konstantin.filtschew.de\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/de09aadf27dd3b71cb0030f6f2214b1e\",\"name\":\"Konstantin Filtschew\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/konstantin.filtschew.de\/blog\/wp-content\/uploads\/2025\/10\/KFLogo1.png\",\"contentUrl\":\"https:\/\/konstantin.filtschew.de\/blog\/wp-content\/uploads\/2025\/10\/KFLogo1.png\",\"width\":222,\"height\":193,\"caption\":\"Konstantin Filtschew\"},\"logo\":{\"@id\":\"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Building an operation system without source code, is like buying a self assemble space shuttle without instructions. (Author unknown)\",\"sameAs\":[\"https:\/\/konstantin.filtschew.de\",\"https:\/\/www.linkedin.com\/in\/konstantin-filtschew-b7138019\/\",\"https:\/\/x.com\/fa11enangel\"],\"url\":\"https:\/\/konstantin.filtschew.de\/blog\/author\/konstantin-filtschew\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren - Konstantin Filtschew","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/","og_locale":"de_DE","og_type":"article","og_title":"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren - Konstantin Filtschew","og_description":"Es gibt immer wieder Aufgaben, die sehr lange dauern und sehr gro\u00dfe Mengen an Daten verarbeiten m\u00fcssen. Dabei geht es meistens um Minuten oder gar Stunden, Tage &#8230; Diese sollten sinnvollerweise parallelisiert werden, um die Leistungs des Systems zu nutzen. Heutige Systeme sind sehr oft Mehrkern- bzw. Mehrprozessorsysteme. Auch ist das GHz-Rennen im Moment zu [&hellip;]","og_url":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/","og_site_name":"Konstantin Filtschew","article_published_time":"2009-06-14T09:33:07+00:00","article_modified_time":"2012-09-21T14:16:40+00:00","author":"Konstantin Filtschew","twitter_card":"summary_large_image","twitter_creator":"@fa11enangel","twitter_site":"@fa11enangel","twitter_misc":{"Verfasst von":"Konstantin Filtschew","Gesch\u00e4tzte Lesezeit":"2\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/#article","isPartOf":{"@id":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/"},"author":{"name":"Konstantin Filtschew","@id":"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/de09aadf27dd3b71cb0030f6f2214b1e"},"headline":"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren","datePublished":"2009-06-14T09:33:07+00:00","dateModified":"2012-09-21T14:16:40+00:00","mainEntityOfPage":{"@id":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/"},"wordCount":450,"commentCount":3,"publisher":{"@id":"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/de09aadf27dd3b71cb0030f6f2214b1e"},"articleSection":["Java"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/","url":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/","name":"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren - Konstantin Filtschew","isPartOf":{"@id":"https:\/\/konstantin.filtschew.de\/blog\/#website"},"datePublished":"2009-06-14T09:33:07+00:00","dateModified":"2012-09-21T14:16:40+00:00","breadcrumb":{"@id":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/konstantin.filtschew.de\/blog\/2009\/06\/14\/mit-threadpoolexecutor-arbeit-unter-java-effizient-parallelisieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/konstantin.filtschew.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Mit ThreadPoolExecutor Arbeit unter Java effizient parallelisieren"}]},{"@type":"WebSite","@id":"https:\/\/konstantin.filtschew.de\/blog\/#website","url":"https:\/\/konstantin.filtschew.de\/blog\/","name":"Konstantin Filtschew","description":"Der t\u00e4gliche IT-Wahnsinn","publisher":{"@id":"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/de09aadf27dd3b71cb0030f6f2214b1e"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/konstantin.filtschew.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/de09aadf27dd3b71cb0030f6f2214b1e","name":"Konstantin Filtschew","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/image\/","url":"https:\/\/konstantin.filtschew.de\/blog\/wp-content\/uploads\/2025\/10\/KFLogo1.png","contentUrl":"https:\/\/konstantin.filtschew.de\/blog\/wp-content\/uploads\/2025\/10\/KFLogo1.png","width":222,"height":193,"caption":"Konstantin Filtschew"},"logo":{"@id":"https:\/\/konstantin.filtschew.de\/blog\/#\/schema\/person\/image\/"},"description":"Building an operation system without source code, is like buying a self assemble space shuttle without instructions. (Author unknown)","sameAs":["https:\/\/konstantin.filtschew.de","https:\/\/www.linkedin.com\/in\/konstantin-filtschew-b7138019\/","https:\/\/x.com\/fa11enangel"],"url":"https:\/\/konstantin.filtschew.de\/blog\/author\/konstantin-filtschew\/"}]}},"_links":{"self":[{"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/posts\/335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/comments?post=335"}],"version-history":[{"count":13,"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/posts\/335\/revisions"}],"predecessor-version":[{"id":560,"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/posts\/335\/revisions\/560"}],"wp:attachment":[{"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/media?parent=335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/categories?post=335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/konstantin.filtschew.de\/blog\/wp-json\/wp\/v2\/tags?post=335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}