标签:线程池 eth ted current 单线程 ati 策略 多线程 lifo
提交一个任务到线程池中,线程池的处理流程如下:
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程
这种类型的线程池特点是:
package com.thread.threadpool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程 * * @author yyx 2019年1月5日 */ public class CachedThreadPool { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 1; i <= 10; i++) { final int index = i; executorService.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + "当前运行到:" + index); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } }); } } }
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
这种类型的线程池特点是:
package com.thread.threadpool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待 * * @author yyx 2019年1月5日 */ public class FixedThreadPool { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(3); for (int i = 1; i <= 10; i++) { final int index = i; executorService.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + "当前运行到:" + index); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } }); } } }
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
这种类型的线程池特点是:
package com.thread.threadpool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行 * * @author yyx 2019年1月5日 */ public class SingleThreadExecutor { public static void main(String[] args) { ExecutorService executorService = Executors.newSingleThreadExecutor(); for (int i = 1; i <= 10; i++) { final int index = i; executorService.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + "当前运行到:" + index); try { Thread.sleep(3000); } catch (Exception ex) { ex.printStackTrace(); } } }); } } }
创建一个定长线程池,支持定时及周期性任务执行
这种类型的线程池特点是:
package com.thread.threadpool; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * 创建一个定长线程池,支持定时及周期性任务执行 * * @author yyx 2019年1月5日 */ public class ScheduledThreadPool { public static void main(String[] args) { ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5); scheduledExecutorService.schedule(new Runnable() { @Override public void run() { System.out.println("延迟3秒执行"); } }, 3, TimeUnit.SECONDS); scheduledExecutorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("延迟3秒后每1秒执行一次"); } }, 3, 1, TimeUnit.SECONDS); } }
标签:线程池 eth ted current 单线程 ati 策略 多线程 lifo
原文地址:https://www.cnblogs.com/fengfuwanliu/p/10167207.html