作者: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;Overridepublic 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;Overridepublic 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;Overridepublic 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;Overridepublic void run() {System.out.println("延迟1秒后每3秒执行一次");}}, 1, 3, TimeUnit.SECONDS);}
}