Java ExecutorService管理线程池的简单用法

可以在 java.util.concurrent中找到管理线程池的顶级接口 Executors

import java.util.concurrent.*;

Executors 接口定义了一个 execute()方法,接收一个实例化的Runnable对象,来启动这个任务,不过常用的还是 ExecutorService

ExecutorService 类继承自 Executors,但是提供相当方便的一些方法,可以通过下面的代码来创建不同规模,不同特性的线程池,返回值是ExecutorService 对象

创建不同规模/特性的线程池

/*
构造输入	:无
返回值  	: 一个ExecutorService对象
特性 	: 创建灵活的线程池,如果线程池过大,会自动调整,回收一些线程
*/
Executors.newCachedThreadPool();
/*
构造输入	:int,线程池最大并发数量
返回值  	: 一个ExecutorService对象
特性 	: 创建固定尺寸的线程池,限制最大并发的线程数目,超出指定数目的线程会在队列中等待直到有空位
*/
Executors.newFixedThreadPool(int);
/*
构造输入	:无
返回值  	: 一个ExecutorService对象
特性 	: 创建单个线程的线程池,只会执行一个线程,按照先进先出执行
*/
Executors.newSingleThreadExecutor();

常见方法:

/*
submit 方法接收一个实例化的Thread或者Runnable对象,将接收对象添加进线程池
*/
submit()
/*
表示之后不再有新的线程加入了
*/
shutdown();

演示

同时用Thread派生类打印数字,用Runnable实现类来打印字母
在这里插入图片描述

package concurrent;
import java.util.concurrent.*;

import java.util.concurrent.Executors;

class printNumThread extends Thread
{
	String thname;
	printNumThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(int i=0; i<=26; i++) {
			System.out.printf("Thread name: %s , print num: %d\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

class printCharThread implements Runnable {
	String thname;
	printCharThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(char i='a'; i<='z'; i++) {
			System.out.printf("Thread name: %s , print char: %c\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {

		ExecutorService pool = Executors.newCachedThreadPool();
		
		printNumThread pt1 = new printNumThread("线程A");
		printNumThread pt2 = new printNumThread("线程B");
		printCharThread run3 = new printCharThread("线程C");
		printCharThread run4 = new printCharThread("线程D");
		
		pool.submit(pt1);
		pool.submit(pt2);
		pool.submit(run3);
		pool.submit(run4);
		
		pool.shutdown();
	}
}
发布了262 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44176696/article/details/105148453