java多线程——Executors线程池的四种用法简单解析

1、Executors.newFixedThreadPool(5)    是创建一个线程池,池子里面有5个线程,任务数多余5个时,超出的任务队列中排队等候执行

2、Executors.newCachedThreadPool    创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

3、Executors.newSingleThreadExecutor     创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

注::FIFO: 全称First in, First out,先进先出。 LIFO: 全称Last in, First out,后进先出。 

importjava.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author liugao
 * 
 *         2018年6月8日-上午10:18:15
 */
public class ThreadPoolTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		ExecutorService threadPool = Executors.newCachedThreadPool();
//		ExecutorService threadPool = Executors.newSingleThreadExecutor();
		ExecutorService threadPool = Executors.newFixedThreadPool(5);// 创建一个线程池

		for (int i = 0; i < 10; i++) {
			final int task = i;
			threadPool.execute(new Runnable() {		//往池子里面丢10次任务
				@Override
				public void run() {
					for (int j = 0; j <= 3; j++) {
						System.out.println("当前线程名:"
								+ Thread.currentThread().getName()+"####当前任务是:"+ task);
					}
				}
			});
		}
		threadPool.shutdown();
	}

}

线程池用完之后记得shutdown


4、Executors.newScheduledThreadPool(2);     可以延迟执行,除了延迟执行外,跟newFixedThreadPool基本一样

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
 * @author liugao
 * 
 *         2018年6月8日-上午10:18:15
 */
public class ThreadPoolTest {

	/**
	 * @param 6秒后炸一次,之后每隔2秒炸一次
	 */
	public static void main(String[] args) {
		ScheduledExecutorService ScheduledThreadPool = Executors.newScheduledThreadPool(2);
			ScheduledThreadPool.scheduleAtFixedRate(new Runnable() { 
						@Override
						public void run() {
							
							System.out.println("booming!");
						}
					}, 6, 2, TimeUnit.SECONDS);
	}
}
当第一个任务执行完成之后,延迟指定时间再开始执行第二个任务

猜你喜欢

转载自blog.csdn.net/wiliam_mountain/article/details/80620697