Einfache Verwendung von Java ExecutorService zum Verwalten des Thread-Pools

Kann java.util.concurrentim Management Thread - Pool von Top-Level - Schnittstelle gefundenExecutors

import java.util.concurrent.*;

ExecutorsSchnittstelle definiert ein execute()Verfahren zur Herstellung einer Instantiierung des Empfangens Runnableeines Objekts, um diese Aufgabe zu starten, aber häufig verwendeten oder ExecutorServiceKlasse

ExecutorServiceDie Klasse erbt von Executors, bietet jedoch einige praktische Methoden. Mit dem folgenden Code können Sie Thread-Pools mit unterschiedlichen Größen und Merkmalen erstellen. Der Rückgabewert ist ein ExecutorServiceObjekt.

Erstellen Sie Thread-Pools mit verschiedenen Größen / Funktionen

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

Gängige Methoden:

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

Demo

Verwenden Sie gleichzeitig die vom Thread abgeleitete Klasse zum Drucken von Zahlen und die ausführbare Implementierungsklasse zum Drucken von Buchstaben
Fügen Sie hier eine Bildbeschreibung ein

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();
	}
}
Veröffentlichte 262 Originalartikel · gewann 11 · 10 Tausend Aufrufe

Ich denke du magst

Origin blog.csdn.net/weixin_44176696/article/details/105148453
Empfohlen
Rangfolge