四种线程池的特性以及测试代码

阅读更多
四种线程池的特点如下所示:

1、缓存型的
cachedThreadPool

特点:线程池无限大,当处理第二个线程时若第一个处理完,则会继续使用第一个线程,并且该线程池如果长度超过处理需要,可以收回空闲线程,反之,则新建线程
2、固定大小的
fixedThreadPool

特点:线程池大小固定,如果线程池大小为3,(也就是每次同时只能处理三个,超出三个之外的就需要等待)
3、任务型的
scheduledThreadPool

特点:当实现的是scheduleAtFixedRate或者schedule时,支持定时和周期性任务,如果实现的是execute的话则为普通线程池可自定义线程池大小
4、单线程线程池
singleThreadExecutor

特点:单线程的线程池,一次最大处理量为了,超过的需要等待,不能定义线程池大小
四种线程池的特点的演示代码如下:
package test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Thread_test {
	static ExecutorService es = Executors.newCachedThreadPool();//当前线程池特性为,线程池无限大,当处理第二个线程时若第一个处理完,则会继续使用第一个线程,并且该线程池如果长度超过处理需要,可以收回空闲线程,反之,则新建线程
	//static ExecutorService es = Executors.newFixedThreadPool(3);//因为线程池大小为3,(也就是每次同时只能处理三个,超出三个之外的就需要等待)
	//static ExecutorService es = Executors.newScheduledThreadPool(3);//该线程池支持定时以及周期任务(A块测试代码可以测试普通多线程的情况,B块测试代码,可以测试定时任务)
	//static ExecutorService es = Executors.newSingleThreadExecutor();//单线程的线程池
	public static void doTest() {
		// A块测试区	(CachedThreadPool,FixedThreadPool)
		 es.execute(new Runnable() {
			public   void run() {
				System.out.println("执行了--");
				try {
					Thread.sleep(2000);//线程休眠2秒
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		 
		});
		
//		 B块测试区	(ScheduledThreadPool)
//		 ((ScheduledExecutorService) es).scheduleAtFixedRate(new Runnable() {
//			    int i=1;
//				@Override
//				public void run() {
//				
//				int time=3*i;
//				System.out.println("距离第一次打印已经过了"+time+"秒");
//				i++;
//				}
//				//}, 3, TimeUnit.SECONDS);//延迟三秒执行(定时执行的方法为schedule)
//	            }, 1, 3, TimeUnit.SECONDS);//每三秒执行一次

	}

	public static void main(String[] args) {
	for (int i = 0; i < 12; i++) {
		doTest();
	}
	}
}



你可能感兴趣的:(多线程,java)