1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <!--NewPage--> 3 <HTML> 4 <HEAD> 5 <!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 --> 6 <TITLE> 7 Executors (Guava Libraries 2010.01.04) 8 </TITLE> 9 10 <META NAME="date" CONTENT="2010-01-04"> 11 12 <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style"> 13 14 <SCRIPT type="text/javascript"> 15 function windowTitle() 16 { 17 if (location.href.indexOf('is-external=true') == -1) { 18 parent.document.title="Executors (Guava Libraries 2010.01.04)"; 19 } 20 } 21 </SCRIPT> 22 <NOSCRIPT> 23 </NOSCRIPT> 24 25 </HEAD> 26 27 <BODY BGCOLOR="white" onload="windowTitle();"> 28 <HR> 29 30 31 <!-- ========= START OF TOP NAVBAR ======= --> 32 <A NAME="navbar_top"><!-- --></A> 33 <A HREF="#skip-navbar_top" title="Skip navigation links"></A> 34 <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""> 35 <TR> 36 <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> 37 <A NAME="navbar_top_firstrow"><!-- --></A> 38 <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> 39 <TR ALIGN="center" VALIGN="top"> 40 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> 41 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> 42 <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> 43 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Executors.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD> 44 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> 45 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> 46 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> 47 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> 48 </TR> 49 </TABLE> 50 </TD> 51 <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> 52 </EM> 53 </TD> 54 </TR> 55 56 <TR> 57 <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> 58 <A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A> 59 <A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD> 60 <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> 61 <A HREF="../../../../../index.html?com/google/common/util/concurrent/Executors.html" target="_top"><B>FRAMES</B></A> 62 <A HREF="Executors.html" target="_top"><B>NO FRAMES</B></A> 63 <SCRIPT type="text/javascript"> 64 <!-- 65 if(window==top) { 66 document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>'); 67 } 68 //--> 69 </SCRIPT> 70 <NOSCRIPT> 71 <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A> 72 </NOSCRIPT> 73 74 75 </FONT></TD> 76 </TR> 77 <TR> 78 <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> 79 SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> 80 <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> 81 DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> 82 </TR> 83 </TABLE> 84 <A NAME="skip-navbar_top"></A> 85 <!-- ========= END OF TOP NAVBAR ========= --> 86 87 <HR> 88 <!-- ======== START OF CLASS DATA ======== --> 89 <H2> 90 <FONT SIZE="-1"> 91 com.google.common.util.concurrent</FONT> 92 <BR> 93 Class Executors</H2> 94 <PRE> 95 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A> 96 <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.Executors</B> 97 </PRE> 98 <HR> 99 <DL> 100 <DT><PRE>public class <B>Executors</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL> 101 </PRE> 102 103 <P> 104 Factory and utility methods for <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutorService</CODE></A>, and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>. 105 <P> 106 107 <P> 108 <DL> 109 <DT><B>Since:</B></DT> 110 <DD>2009.09.15 <b>tentative</b></DD> 111 <DT><B>Author:</B></DT> 112 <DD>Eric Fellheimer, Kyle Littlefield, Justin Mahoney</DD> 113 </DL> 114 <HR> 115 116 <P> 117 118 <!-- ======== CONSTRUCTOR SUMMARY ======== --> 119 120 <A NAME="constructor_summary"><!-- --></A> 121 <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> 122 <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> 123 <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> 124 <B>Constructor Summary</B></FONT></TH> 125 </TR> 126 <TR BGCOLOR="white" CLASS="TableRowColor"> 127 <TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#Executors()">Executors</A></B>()</CODE> 128 129 <BR> 130 </TD> 131 </TR> 132 </TABLE> 133 134 <!-- ========== METHOD SUMMARY =========== --> 135 136 <A NAME="method_summary"><!-- --></A> 137 <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> 138 <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> 139 <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> 140 <B>Method Summary</B></FONT></TH> 141 </TR> 142 <TR BGCOLOR="white" CLASS="TableRowColor"> 143 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> 144 <CODE>static void</CODE></FONT></TD> 145 <TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#addDelayedShutdownHook(java.util.concurrent.ExecutorService, long, java.util.concurrent.TimeUnit)">addDelayedShutdownHook</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A> service, 146 long terminationTimeout, 147 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A> timeUnit)</CODE> 148 149 <BR> 150 Add a shutdown hook to wait for thread completion in the given 151 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>service</CODE></A>.</TD> 152 </TR> 153 <TR BGCOLOR="white" CLASS="TableRowColor"> 154 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> 155 <CODE>static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></CODE></FONT></TD> 156 <TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#daemonThreadFactory()">daemonThreadFactory</A></B>()</CODE> 157 158 <BR> 159 Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> which creates daemon threads.</TD> 160 </TR> 161 <TR BGCOLOR="white" CLASS="TableRowColor"> 162 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> 163 <CODE>static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></CODE></FONT></TD> 164 <TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#daemonThreadFactory(java.util.concurrent.ThreadFactory)">daemonThreadFactory</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A> factory)</CODE> 165 166 <BR> 167 Wraps another <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>, making all new threads daemon threads.</TD> 168 </TR> 169 <TR BGCOLOR="white" CLASS="TableRowColor"> 170 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> 171 <CODE>static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A></CODE></FONT></TD> 172 <TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor)">getExitingExecutorService</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</A> executor)</CODE> 173 174 <BR> 175 Converts the given ThreadPoolExecutor into an ExecutorService that exits 176 when the application is complete.</TD> 177 </TR> 178 <TR BGCOLOR="white" CLASS="TableRowColor"> 179 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> 180 <CODE>static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A></CODE></FONT></TD> 181 <TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor, long, java.util.concurrent.TimeUnit)">getExitingExecutorService</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</A> executor, 182 long terminationTimeout, 183 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A> timeUnit)</CODE> 184 185 <BR> 186 Converts the given ThreadPoolExecutor into an ExecutorService that exits 187 when the application is complete.</TD> 188 </TR> 189 <TR BGCOLOR="white" CLASS="TableRowColor"> 190 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> 191 <CODE>static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</A></CODE></FONT></TD> 192 <TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor)">getExitingScheduledExecutorService</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</A> executor)</CODE> 193 194 <BR> 195 Converts the given ThreadPoolExecutor into a ScheduledExecutorService that 196 exits when the application is complete.</TD> 197 </TR> 198 <TR BGCOLOR="white" CLASS="TableRowColor"> 199 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> 200 <CODE>static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</A></CODE></FONT></TD> 201 <TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor, long, java.util.concurrent.TimeUnit)">getExitingScheduledExecutorService</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</A> executor, 202 long terminationTimeout, 203 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A> timeUnit)</CODE> 204 205 <BR> 206 Converts the given ScheduledThreadPoolExecutor into a 207 ScheduledExecutorService that exits when the application is complete.</TD> 208 </TR> 209 <TR BGCOLOR="white" CLASS="TableRowColor"> 210 <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> 211 <CODE>static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A></CODE></FONT></TD> 212 <TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#sameThreadExecutor()">sameThreadExecutor</A></B>()</CODE> 213 214 <BR> 215 Creates an executor service that runs each task in the thread 216 that invokes <code>execute/submit</code>, as in <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadPoolExecutor.CallerRunsPolicy</CODE></A> This 217 applies both to individually submitted tasks and to collections of tasks 218 submitted via <code>invokeAll</code> or <code>invokeAny</code>.</TD> 219 </TR> 220 </TABLE> 221 <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> 222 <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> 223 <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor"> 224 <TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH> 225 </TR> 226 <TR BGCOLOR="white" CLASS="TableRowColor"> 227 <TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD> 228 </TR> 229 </TABLE> 230 231 <P> 232 233 <!-- ========= CONSTRUCTOR DETAIL ======== --> 234 235 <A NAME="constructor_detail"><!-- --></A> 236 <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> 237 <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> 238 <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> 239 <B>Constructor Detail</B></FONT></TH> 240 </TR> 241 </TABLE> 242 243 <A NAME="Executors()"><!-- --></A><H3> 244 Executors</H3> 245 <PRE> 246 public <B>Executors</B>()</PRE> 247 <DL> 248 </DL> 249 250 <!-- ============ METHOD DETAIL ========== --> 251 252 <A NAME="method_detail"><!-- --></A> 253 <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> 254 <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> 255 <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> 256 <B>Method Detail</B></FONT></TH> 257 </TR> 258 </TABLE> 259 260 <A NAME="getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3> 261 getExitingExecutorService</H3> 262 <PRE> 263 public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A> <B>getExitingExecutorService</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</A> executor, 264 long terminationTimeout, 265 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A> timeUnit)</PRE> 266 <DL> 267 <DD>Converts the given ThreadPoolExecutor into an ExecutorService that exits 268 when the application is complete. It does so by using daemon threads and 269 adding a shutdown hook to wait for their completion. 270 271 <p>This is mainly for fixed thread pools. 272 See <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newFixedThreadPool(int)" title="class or interface in java.util.concurrent"><CODE>Executors.newFixedThreadPool(int)</CODE></A>. 273 <P> 274 <DD><DL> 275 <DT><B>Parameters:</B><DD><CODE>executor</CODE> - the executor to modify to make sure it exits when the 276 application is finished<DD><CODE>terminationTimeout</CODE> - how long to wait for the executor to 277 finish before terminating the JVM<DD><CODE>timeUnit</CODE> - unit of time for the time parameter 278 <DT><B>Returns:</B><DD>an unmodifiable version of the input which will not hang the JVM</DL> 279 </DD> 280 </DL> 281 <HR> 282 283 <A NAME="getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3> 284 getExitingScheduledExecutorService</H3> 285 <PRE> 286 public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</A> <B>getExitingScheduledExecutorService</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</A> executor, 287 long terminationTimeout, 288 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A> timeUnit)</PRE> 289 <DL> 290 <DD>Converts the given ScheduledThreadPoolExecutor into a 291 ScheduledExecutorService that exits when the application is complete. It 292 does so by using daemon threads and adding a shutdown hook to wait for 293 their completion. 294 295 <p>This is mainly for fixed thread pools. 296 See <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newScheduledThreadPool(int)" title="class or interface in java.util.concurrent"><CODE>Executors.newScheduledThreadPool(int)</CODE></A>. 297 <P> 298 <DD><DL> 299 <DT><B>Parameters:</B><DD><CODE>executor</CODE> - the executor to modify to make sure it exits when the 300 application is finished<DD><CODE>terminationTimeout</CODE> - how long to wait for the executor to 301 finish before terminating the JVM<DD><CODE>timeUnit</CODE> - unit of time for the time parameter 302 <DT><B>Returns:</B><DD>an unmodifiable version of the input which will not hang the JVM</DL> 303 </DD> 304 </DL> 305 <HR> 306 307 <A NAME="addDelayedShutdownHook(java.util.concurrent.ExecutorService, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3> 308 addDelayedShutdownHook</H3> 309 <PRE> 310 public static void <B>addDelayedShutdownHook</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A> service, 311 long terminationTimeout, 312 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A> timeUnit)</PRE> 313 <DL> 314 <DD>Add a shutdown hook to wait for thread completion in the given 315 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>service</CODE></A>. This is useful if the given service uses 316 daemon threads, and we want to keep the JVM from exiting immediately on 317 shutdown, instead giving these daemon threads a chance to terminate 318 normally. 319 <P> 320 <DD><DL> 321 <DT><B>Parameters:</B><DD><CODE>service</CODE> - ExecutorService which uses daemon threads<DD><CODE>terminationTimeout</CODE> - how long to wait for the executor to finish 322 before terminating the JVM<DD><CODE>timeUnit</CODE> - unit of time for the time parameter</DL> 323 </DD> 324 </DL> 325 <HR> 326 327 <A NAME="getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor)"><!-- --></A><H3> 328 getExitingExecutorService</H3> 329 <PRE> 330 public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A> <B>getExitingExecutorService</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</A> executor)</PRE> 331 <DL> 332 <DD>Converts the given ThreadPoolExecutor into an ExecutorService that exits 333 when the application is complete. It does so by using daemon threads and 334 adding a shutdown hook to wait for their completion. 335 336 <p>This method waits 120 seconds before continuing with JVM termination, 337 even if the executor has not finished its work. 338 339 <p>This is mainly for fixed thread pools. 340 See <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newFixedThreadPool(int)" title="class or interface in java.util.concurrent"><CODE>Executors.newFixedThreadPool(int)</CODE></A>. 341 <P> 342 <DD><DL> 343 <DT><B>Parameters:</B><DD><CODE>executor</CODE> - the executor to modify to make sure it exits when the 344 application is finished 345 <DT><B>Returns:</B><DD>an unmodifiable version of the input which will not hang the JVM</DL> 346 </DD> 347 </DL> 348 <HR> 349 350 <A NAME="getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor)"><!-- --></A><H3> 351 getExitingScheduledExecutorService</H3> 352 <PRE> 353 public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</A> <B>getExitingScheduledExecutorService</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</A> executor)</PRE> 354 <DL> 355 <DD>Converts the given ThreadPoolExecutor into a ScheduledExecutorService that 356 exits when the application is complete. It does so by using daemon threads 357 and adding a shutdown hook to wait for their completion. 358 359 <p>This method waits 120 seconds before continuing with JVM termination, 360 even if the executor has not finished its work. 361 362 <p>This is mainly for fixed thread pools. 363 See <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newScheduledThreadPool(int)" title="class or interface in java.util.concurrent"><CODE>Executors.newScheduledThreadPool(int)</CODE></A>. 364 <P> 365 <DD><DL> 366 <DT><B>Parameters:</B><DD><CODE>executor</CODE> - the executor to modify to make sure it exits when the 367 application is finished 368 <DT><B>Returns:</B><DD>an unmodifiable version of the input which will not hang the JVM</DL> 369 </DD> 370 </DL> 371 <HR> 372 373 <A NAME="daemonThreadFactory()"><!-- --></A><H3> 374 daemonThreadFactory</H3> 375 <PRE> 376 public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A> <B>daemonThreadFactory</B>()</PRE> 377 <DL> 378 <DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> which creates daemon threads. This is 379 implemented by wrapping <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#defaultThreadFactory()" title="class or interface in java.util.concurrent"><CODE>Executors.defaultThreadFactory()</CODE></A>, marking all new 380 threads as daemon threads 381 <P> 382 <DD><DL> 383 384 <DT><B>Returns:</B><DD>a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> which creates daemon threads</DL> 385 </DD> 386 </DL> 387 <HR> 388 389 <A NAME="daemonThreadFactory(java.util.concurrent.ThreadFactory)"><!-- --></A><H3> 390 daemonThreadFactory</H3> 391 <PRE> 392 public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A> <B>daemonThreadFactory</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A> factory)</PRE> 393 <DL> 394 <DD>Wraps another <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>, making all new threads daemon threads. 395 <P> 396 <DD><DL> 397 <DT><B>Parameters:</B><DD><CODE>factory</CODE> - the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> used to generate new threads 398 <DT><B>Returns:</B><DD>a new <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> backed by <code>factory</code> whose created 399 threads are all daemon threads</DL> 400 </DD> 401 </DL> 402 <HR> 403 404 <A NAME="sameThreadExecutor()"><!-- --></A><H3> 405 sameThreadExecutor</H3> 406 <PRE> 407 public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A> <B>sameThreadExecutor</B>()</PRE> 408 <DL> 409 <DD>Creates an executor service that runs each task in the thread 410 that invokes <code>execute/submit</code>, as in <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadPoolExecutor.CallerRunsPolicy</CODE></A> This 411 applies both to individually submitted tasks and to collections of tasks 412 submitted via <code>invokeAll</code> or <code>invokeAny</code>. In the latter case, 413 tasks will run serially on the calling thread. Tasks are run to 414 completion before a <code>Future</code> is returned to the caller (unless the 415 executor has been shutdown). 416 417 <p>Although all tasks are immediately executed in the thread that 418 submitted the task, this <code>ExecutorService</code> imposes a small 419 locking overhead on each task submission in order to implement shutdown 420 and termination behavior. 421 422 <p>The implementation deviates from the <code>ExecutorService</code> 423 specification with regards to the <code>shutdownNow</code> method. First, 424 "best-effort" with regards to canceling running tasks is implemented 425 as "no-effort". No interrupts or other attempts are made to stop 426 threads executing tasks. Second, the returned list will always be empty, 427 as any submitted task is considered to have started execution. 428 This applies also to tasks given to <code>invokeAll</code> or <code>invokeAny</code> 429 which are pending serial execution, even the subset of the tasks that 430 have not yet started execution. It is unclear from the 431 <code>ExecutorService</code> specification if these should be included, and 432 it's much easier to implement the interpretation that they not be. 433 Finally, a call to <code>shutdown</code> or <code>shutdownNow</code> may result 434 in concurrent calls to <code>invokeAll/invokeAny</code> throwing 435 RejectedExecutionException, although a subset of the tasks may already 436 have been executed. 437 <P> 438 <DD><DL> 439 </DL> 440 </DD> 441 </DL> 442 <!-- ========= END OF CLASS DATA ========= --> 443 <HR> 444 445 446 <!-- ======= START OF BOTTOM NAVBAR ====== --> 447 <A NAME="navbar_bottom"><!-- --></A> 448 <A HREF="#skip-navbar_bottom" title="Skip navigation links"></A> 449 <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""> 450 <TR> 451 <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> 452 <A NAME="navbar_bottom_firstrow"><!-- --></A> 453 <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> 454 <TR ALIGN="center" VALIGN="top"> 455 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> 456 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> 457 <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> 458 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Executors.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD> 459 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> 460 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> 461 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> 462 <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> 463 </TR> 464 </TABLE> 465 </TD> 466 <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> 467 </EM> 468 </TD> 469 </TR> 470 471 <TR> 472 <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> 473 <A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A> 474 <A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD> 475 <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> 476 <A HREF="../../../../../index.html?com/google/common/util/concurrent/Executors.html" target="_top"><B>FRAMES</B></A> 477 <A HREF="Executors.html" target="_top"><B>NO FRAMES</B></A> 478 <SCRIPT type="text/javascript"> 479 <!-- 480 if(window==top) { 481 document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>'); 482 } 483 //--> 484 </SCRIPT> 485 <NOSCRIPT> 486 <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A> 487 </NOSCRIPT> 488 489 490 </FONT></TD> 491 </TR> 492 <TR> 493 <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> 494 SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> 495 <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> 496 DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> 497 </TR> 498 </TABLE> 499 <A NAME="skip-navbar_bottom"></A> 500 <!-- ======== END OF BOTTOM NAVBAR ======= --> 501 502 <HR> 503 504 </BODY> 505 </HTML> 506