作者:XC一米_623 | 来源:互联网 | 2023-10-13 09:11
newFixedThreadPool 创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。
import java. util. concurrent. ExecutorService; import java. util. concurrent. Executors; public class demo01 { public static void main ( String[ ] args) { ExecutorService fixedThreadPool &#61; Executors. newFixedThreadPool ( 3 ) ; for ( int i &#61; 0 ; i < 10 ; i&#43;&#43; ) { fixedThreadPool. execute ( new Runnable ( ) { &#64;Override public void run ( ) { try { System. out. println ( Thread. currentThread ( ) . getName ( ) &#43; "正在被执行" ) ; Thread. sleep ( 2000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } } } ) ; } } }
因为线程池大小为3&#xff0c;每个任务输出打印结果后sleep 2秒&#xff0c;所以每两秒打印3个结果。 定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()
newCachedThreadPool 创建一个可缓存的线程池。这种类型的线程池特点是&#xff1a;
工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。
如果长时间没有往线程池中提交任务&#xff0c;即如果工作线程空闲了指定的时间(默认为1分钟)&#xff0c;则该工作线程将自动终止。终止后&#xff0c;如果你又提交了新的任务&#xff0c;则线程池重新创建一个工作线程。
import java. util. concurrent. ExecutorService; import java. util. concurrent. Executors; public class demo01 { public static void main ( String[ ] args) { ExecutorService cachedThreadPool &#61; Executors. newCachedThreadPool ( ) ; for ( int i &#61; 0 ; i < 10 ; i&#43;&#43; ) { try { Thread. sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } cachedThreadPool. execute ( new Runnable ( ) { &#64;Override public void run ( ) { System. out. println ( Thread. currentThread ( ) . getName ( ) &#43; "正在被执行" ) ; try { Thread. sleep ( 1000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } } } ) ; } } }
线程池为无限大&#xff0c;当执行当前任务时上一个任务已经完成&#xff0c;会复用执行上一个任务的线程&#xff0c;而不用每次新建线程
newSingleThreadExecutor 创建一个单线程化的Executor&#xff0c;即只创建唯一的工作者线程来执行任务&#xff0c;如果这个线程异常结束&#xff0c;会有另一个取代它&#xff0c;保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务&#xff0c;并且在任意给定的时间不会有多个线程是活动的 。
import java. util. concurrent. ExecutorService; import java. util. concurrent. Executors; public class demo01 { public static void main ( String[ ] args) { ExecutorService singleThreadExecutor &#61; Executors. newSingleThreadExecutor ( ) ; for ( int i &#61; 0 ; i < 10 ; i&#43;&#43; ) { final int index &#61; i; singleThreadExecutor. execute ( new Runnable ( ) { &#64;Override public void run ( ) { try { System. out. println ( Thread. currentThread ( ) . getName ( ) &#43; "正在被执行,打印的值是:" &#43; index) ; Thread. sleep ( 5000 ) ; } catch ( InterruptedException e) { e. printStackTrace ( ) ; } } } ) ; } } }
newScheduledThreadPool 创建一个定长的线程池&#xff0c;而且支持定时的以及周期性的任务执行&#xff0c;类似于Timer。
import java. util. concurrent. ExecutorService; import java. util. concurrent. Executors; public class demo01 { public static void main ( String[ ] args) { ScheduledExecutorService scheduledThreadPool &#61; Executors. newScheduledThreadPool ( 5 ) ; scheduledThreadPool. scheduleAtFixedRate ( new Runnable ( ) { &#64;Override public void run ( ) { System. out. println ( "延迟1秒后每3秒执行一次" ) ; } } , 1 , 3 , TimeUnit. SECONDS) ; } }