java线程池简介之固定线程池

一、滥用线程的弊端

1、创建和销毁一个线程需要耗费资源和时间,有时候得不偿失;

2、线程本事占用内存,线程过多可能会内存溢出,JVM的GC也会增加压力,延长了GC的停顿时间。

 

二、线程池是什么

线程池类似于数据库连接池,你用的时候去拿,不用的时候还给线程池,这样可以减少线程的创建和销毁。

 

三、直接上菜

1、创建固定大小的线程池

package com.yarm.test;

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

/**
 * 
 * @ClassName: FixedThreadPoolDemo 
 * @Description: 创建固定大小的线程池
 * @Company:小松鼠课堂
 * @author yarm_杨松 
 * @date 2018年7月22日 上午10:43:32
 */
public class FixedThreadPoolDemo {

	// 内部类
	public static class MyTask implements Runnable{

		@Override
		public void run() {
			System.err.println("当前线程执行的时间戳:" + System.currentTimeMillis() 
			+ ",Thread ID:" + Thread.currentThread().getId());
			try {
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	//主函数
	public static void main(String[] args) {
		MyTask myTask = new MyTask();
		
		//创建一个固定的线程池 5个
		ExecutorService es = Executors.newFixedThreadPool(5);
		
		//执行10次线程
		for (int i = 0; i < 10; i++) {
			es.submit(myTask);
		}
	}
}

控制台输出:

当前线程执行的时间戳:1532228378006,Thread ID:11
当前线程执行的时间戳:1532228378007,Thread ID:13
当前线程执行的时间戳:1532228378007,Thread ID:10
当前线程执行的时间戳:1532228378007,Thread ID:14
当前线程执行的时间戳:1532228378007,Thread ID:12


当前线程执行的时间戳:1532228381008,Thread ID:12
当前线程执行的时间戳:1532228381008,Thread ID:11
当前线程执行的时间戳:1532228381008,Thread ID:13
当前线程执行的时间戳:1532228381009,Thread ID:14
当前线程执行的时间戳:1532228381009,Thread ID:10

固定线程池实验结果分析:

由上述结果可知,线程池是5个,启动10个线程,线程分成两拨执行,一次执行5个。

 

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