Java多线程之线程池ThreadPoolExecutor

简介: 参考URL: https://www.cnblogs.com/exe19/p/5359885.html

参考URL:

https://www.cnblogs.com/exe19/p/5359885.html




package demo.thread;

public class MyTask implements Runnable {
	private int taskNum;
	
	public MyTask(int num) {
		this.taskNum = num;
	}
	
	@Override 
	public void run() {
		System.out.println("正在执行task " + taskNum);
		try {
			Thread.sleep(4000L);
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("task " + taskNum + "执行完结");
	}

}


package demo.thread;


import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class Run {


	public static void main(String[] args) {
		ThreadPoolExecutor executor = 
				new ThreadPoolExecutor(5, 10, 200, TimeUnit.MICROSECONDS,
						new ArrayBlockingQueue<Runnable>(5));
		
		for (int i = 0; i < 15; i++) {
			MyTask myTask = new MyTask(i);
			executor.execute(myTask);
			System.out.println("线程池中的线程数目: " + executor.getPoolSize()
					+ ", 队列中等待执行的任务数目: " + executor.getQueue().size()
					+ ",已执行完成的任务数目: " + executor.getCompletedTaskCount());;
		}
		executor.shutdown();
		
	}
		
}


正在执行task 0
线程池中的线程数目: 1, 队列中等待执行的任务数目: 0,已执行完成的任务数目: 0
线程池中的线程数目: 2, 队列中等待执行的任务数目: 0,已执行完成的任务数目: 0
正在执行task 1
线程池中的线程数目: 3, 队列中等待执行的任务数目: 0,已执行完成的任务数目: 0
正在执行task 2
线程池中的线程数目: 4, 队列中等待执行的任务数目: 0,已执行完成的任务数目: 0
正在执行task 3
线程池中的线程数目: 5, 队列中等待执行的任务数目: 0,已执行完成的任务数目: 0
正在执行task 4
线程池中的线程数目: 5, 队列中等待执行的任务数目: 1,已执行完成的任务数目: 0
线程池中的线程数目: 5, 队列中等待执行的任务数目: 2,已执行完成的任务数目: 0
线程池中的线程数目: 5, 队列中等待执行的任务数目: 3,已执行完成的任务数目: 0
线程池中的线程数目: 5, 队列中等待执行的任务数目: 4,已执行完成的任务数目: 0
线程池中的线程数目: 5, 队列中等待执行的任务数目: 5,已执行完成的任务数目: 0
线程池中的线程数目: 6, 队列中等待执行的任务数目: 5,已执行完成的任务数目: 0
正在执行task 10
线程池中的线程数目: 7, 队列中等待执行的任务数目: 5,已执行完成的任务数目: 0
正在执行task 11
线程池中的线程数目: 8, 队列中等待执行的任务数目: 5,已执行完成的任务数目: 0
正在执行task 12
线程池中的线程数目: 9, 队列中等待执行的任务数目: 5,已执行完成的任务数目: 0
正在执行task 13
线程池中的线程数目: 10, 队列中等待执行的任务数目: 5,已执行完成的任务数目: 0
正在执行task 14
task 4执行完结
task 2执行完结
task 0执行完结
task 1执行完结
task 3执行完结
正在执行task 8
正在执行task 7
正在执行task 6
正在执行task 5
正在执行task 9
task 10执行完结
task 13执行完结
task 12执行完结
task 14执行完结
task 11执行完结
task 7执行完结
task 6执行完结
task 5执行完结
task 8执行完结
task 9执行完结


目录
相关文章
|
1天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
12 0
|
1天前
|
Java
Java中的并发编程:理解和应用线程池
【4月更文挑战第23天】在现代的Java应用程序中,性能和资源的有效利用已经成为了一个重要的考量因素。并发编程是提高应用程序性能的关键手段之一,而线程池则是实现高效并发的重要工具。本文将深入探讨Java中的线程池,包括其基本原理、优势、以及如何在实际开发中有效地使用线程池。我们将通过实例和代码片段,帮助读者理解线程池的概念,并学习如何在Java应用中合理地使用线程池。
|
5天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
6天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
6天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。
|
6天前
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。
|
7天前
|
缓存 分布式计算 监控
Java并发编程:深入理解线程池
【4月更文挑战第17天】在Java并发编程中,线程池是一种非常重要的技术,它可以有效地管理和控制线程的执行,提高系统的性能和稳定性。本文将深入探讨Java线程池的工作原理,使用方法以及在实际开发中的应用场景,帮助读者更好地理解和使用Java线程池。
|
7天前
|
存储 安全 Java
Java中的容器,线程安全和线程不安全
Java中的容器,线程安全和线程不安全
15 1
|
7天前
|
Java 开发者
Java中多线程并发控制的实现与优化
【4月更文挑战第17天】 在现代软件开发中,多线程编程已成为提升应用性能和响应能力的关键手段。特别是在Java语言中,由于其平台无关性和强大的运行时环境,多线程技术的应用尤为广泛。本文将深入探讨Java多线程的并发控制机制,包括基本的同步方法、死锁问题以及高级并发工具如java.util.concurrent包的使用。通过分析多线程环境下的竞态条件、资源争夺和线程协调问题,我们提出了一系列实现和优化策略,旨在帮助开发者构建更加健壮、高效的多线程应用。
7 0
|
18天前
|
Java 调度
Java并发编程:深入理解线程池的原理与实践
【4月更文挑战第6天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将从线程池的基本原理入手,逐步解析其工作过程,以及如何在实际开发中合理使用线程池以提高程序性能。同时,我们还将关注线程池的一些高级特性,如自定义线程工厂、拒绝策略等,以帮助读者更好地掌握线程池的使用技巧。