{"id":40,"date":"2007-01-31T11:30:00","date_gmt":"2007-01-31T11:30:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=40"},"modified":"2007-01-31T11:30:00","modified_gmt":"2007-01-31T11:30:00","slug":"taskexecutor-und-java-util-concurrent-executor-in-spring-2","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2007\/01\/taskexecutor-und-java-util-concurrent-executor-in-spring-2\/","title":{"rendered":"TaskExecutor und java.util.concurrent.Executor in Spring 2"},"content":{"rendered":"<p>Seit Java 5 gibt es mit dem Executor (JSR 166) eine Schnittstelle f&uuml;r &#8222;Ausf&uuml;hrer&#8220; von Runnable-Objekten.<br \/>Spring bietet mit dem TaskExecutor die gleiche Schnittstelle.<br \/>&#8211; So steht die Funktionalit&auml;t auch f&uuml;r Java 1.4 und Java 1.3 und auch f&uuml;r Java EE Umgebungen zur Verf&uuml;gung.<br \/>org.springframework.core.task.TaskExecutor:<br \/>void execute( Runnable task )<\/p>\n<p><span style=\"font-weight: bold;\">Die TaskExecutor im &Uuml;berblick<\/span><\/p>\n<p>SimpleThreadPoolTaskExecutor<br \/>&#8211; Thread-Pool durch Quartz&#8217;s SimpleThreadPool.<br \/>SimpleAsyncTaskExecutor<br \/>&#8211; Erzeugt pro Anfrage einen neuer Thread. Es gibt eine optionale maximale Gr&ouml;&szlig;e.<br \/>SyncTaskExecutor<br \/>&#8211; F&uuml;hrt Runnable im aktuellen Thread aus. Erzeugt also keinen neuen Thread zur Nebenl&auml;ufigkeit.<br \/>ConcurrentTaskExecutor<br \/>&#8211; Ein Wrapper zum java.util.concurrent.Executor von Java 5.<br \/>ThreadPoolTaskExecutor<br \/>&#8211; Geht direkt auf den java.util.concurrent.ThreadPoolExecutor von Java 5. Erm&ouml;gicht Anpassung der Properties &#8222;corePoolSize&#8220;, &#8222;maxPoolSize&#8220;, &#8222;keepAliveSeconds&#8220;, &#8222;queueCapacity&#8220;.<br \/>TimerTaskExecutor<br \/>&#8211; Nutzt einen java.util.Timer zur Ausf&uuml;hrung. Der Runnable wird als TimerTask hintereinander durch den Timer-Thread ausgef&uuml;hrt.<br \/>WorkManagerTaskExecutor<br \/>&#8211; Nutzt CommonJ WorkManager als Implementierung. Erm&ouml;glicht Ausf&uuml;hrung auf Applikationsservern von BEA und IBM.<\/p>\n<p><span style=\"font-weight: bold;\">Beispiel f&uuml;r TaskExecutor<\/span><\/p>\n<p>public class DoItExecutor<br \/>{<br \/>  private TaskExecutor executor;<\/p>\n<p>  public DoItExecutor( TaskExecutor executor )<br \/>  {<br \/>    this.executor = executor;<br \/>  }<\/p>\n<p>  public void doIt()<br \/>  {<br \/>    Runnable run = new Runnable() {<br \/>      public void run() {<br \/>        System.out.println( Thread.currentThread() );<br \/>      }<br \/>    };<\/p>\n<p>    executor.execute( run );<br \/>    executor.execute( run );<br \/>  }<br \/>}<\/p>\n<p><span style=\"font-weight: bold;\">Injizierung vom TaskExecutor<\/span><\/p>\n<p>&lt;bean id=&#8220;taskExecutor&#8220; class=&#8220;org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor&#8220;&gt;<br \/>  &lt;property name=&#8220;corePoolSize&#8220; value=&#8220;5&#8243; \/&gt;<br \/>  &lt;property name=&#8220;maxPoolSize&#8220; value=&#8220;10&#8243; \/&gt;<br \/>  &lt;property name=&#8220;queueCapacity&#8220; value=&#8220;25&#8243; \/&gt;<br \/>&lt;\/bean&gt;<\/p>\n<p>&lt;bean id=&#8220;doItExecutor&#8220; class=&#8220;DoItExecutor&#8220;&gt;<br \/>  &lt;constructor-arg ref=&#8220;taskExecutor&#8220; \/&gt;<br \/>&lt;\/bean&gt;<\/p>\n<p><span style=\"font-weight: bold;\">&#8222;Fehlende&#8220; Typen aus Java 5<\/span><\/p>\n<p>Spring bietet unterschiedliche Implementierungen f&uuml;r den TaskExecutor, aber Java 5 bietet au&szlig;er execute() im Executor noch mehr.<br \/>Der java.util.concurrent.ThreadPoolExecutor implementiert mehr als nur Executor, n&auml;mlich ExecutorService. Das bietet<br \/>&#8211; awaitTermination(), invokeAll(), invokeAny(), isShutdown(), isTerminated(), shutdown(), shutdownNow(), submit()<br \/>&#8211; mit weiteren Typen wie Future, Callable.<br \/>Spring bietet daf&uuml;r bisher keine Abstraktion!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Seit Java 5 gibt es mit dem Executor (JSR 166) eine Schnittstelle f&uuml;r &#8222;Ausf&uuml;hrer&#8220; von Runnable-Objekten.Spring bietet mit dem TaskExecutor die gleiche Schnittstelle.&#8211; So steht die Funktionalit&auml;t auch f&uuml;r Java 1.4 und Java 1.3 und auch f&uuml;r Java EE Umgebungen zur Verf&uuml;gung.org.springframework.core.task.TaskExecutor:void execute( Runnable task ) Die TaskExecutor im &Uuml;berblick SimpleThreadPoolTaskExecutor&#8211; Thread-Pool durch Quartz&#8217;s SimpleThreadPool.SimpleAsyncTaskExecutor&#8211; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-40","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/40","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=40"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/40\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=40"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=40"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=40"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}