1、固定线程池:
package concurrent.threadpool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 固定线程池
* 使用Executors.newFixedThreadPool(3)方法指定池中允许执行线程的个数
* 如果超过这个线程个数,后面的线程就会等待
*/
public class FixedThreadPoolTest {
public static void main(String[] args) {
//创建一个初始线程为3个的线程池
ExecutorService pool=Executors.newFixedThreadPool(3);
for(int i=0;i<10;i++){
final int task=i;
pool.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=0;j<10;j++){
System.out.println(Thread.currentThread().getName()+"正在进行第"+task+"个任务,第"+j+"次循环");
}
}
});
}
System.out.println("all of ten tasks have committed");
//关闭线程池
pool.shutdown();
}
}
2、缓存线程池:
package concurrent.threadpool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 缓存线程池
* 如果池中的线程不够,会自动增加线程
*/
public class CachedThreadPoolTest {
public static void main(String[] args) {
//创建一个缓存线程池
ExecutorService pool=Executors.newCachedThreadPool();
for(int i=0;i<10;i++){
final int task=i;
pool.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=0;j<10;j++){
System.out.println(Thread.currentThread().getName()+"正在进行第"+task+"个任务,第"+j+"次循环");
}
}
});
}
System.out.println("all of ten tasks have committed");
}
}
3、定时器线程池:
package concurrent.threadpool;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 定时器线程池
*
*/
public class ScheduledThreadPoolTest {
public static void main(String[] args) {
// method1();
method2();
}
/**
* 2秒之后执行线程
*/
public static void method1(){
ScheduledExecutorService pool = Executors.newScheduledThreadPool(3);
//2秒之后执行这个线程
pool.schedule(new Runnable() {
@Override
public void run() {
System.out.println("爆炸");
}
}, 2, TimeUnit.SECONDS);
}
/**
* 5秒后第一次执行线程,之后每隔2秒执行一次
* 也就是5秒后打印第一次爆炸,之后每隔2秒打印一次爆炸
*/
public static void method2(){
ScheduledExecutorService pool = Executors.newScheduledThreadPool(3);
pool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("爆炸");
}
}, 5, 2, TimeUnit.SECONDS);
}
}
4、单线程池:
package concurrent.threadpool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 只有一个线程工作的线程池
* 始终保持池中有一个线程,当一个线程死了会立即重新创建一个线程
*/
public class SingleThreadExecutorTest {
public static void main(String[] args) {
ExecutorService pool=Executors.newSingleThreadExecutor();
for(int i=0;i<10;i++){
final int task=i;
pool.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=0;j<10;j++){
System.out.println(Thread.currentThread().getName()+"正在进行第"+task+"个任务,第"+j+"次循环");
}
}
});
}
System.out.println("all of ten tasks have committed");
}
}
分享到:
相关推荐
本文将深入探讨四种常见的Java线程池实例:`ThreadPoolExecutor`、`Executors`提供的固定线程池、单线程池和定时线程池。 1. **ThreadPoolExecutor**: 这是最基础也是最灵活的线程池实现,可以通过`new ...
在Java编程中,Spring框架提供了一种优雅的方式来管理和执行异步任务,这就是Spring的线程池。线程池是多线程编程中的一个重要概念,它能够有效地管理并发任务的执行,提高系统的性能和效率。本实例将深入探讨Spring...
本文将深入探讨“C++线程池实例”中的关键知识点,包括线程池的概念、实现原理以及如何在VC6.0环境下进行编译和应用。 线程池是一种线程使用模式,它预先创建了一组可重用的工作线程,这些线程由线程池统一管理和...
线程池是一种基于池化思想的设计模式,用于管理和复用一组预先创建好的线程。通过线程池可以有效地控制运行中的线程数量,并重用空闲线程处理新任务,从而减少了创建和销毁线程带来的开销。线程池通常包括以下几个...
Java的`java.util.concurrent`包提供了四种主要的线程池实现:`Executors.newFixedThreadPool()`, `Executors.newSingleThreadExecutor()`, `Executors.newCachedThreadPool()`以及`Executors.newWorkStealingPool()...
Java提供了四种预定义的拒绝策略,如抛出异常、忽略任务、调用系统关机钩子或自定义策略。 5. **生命周期管理**:线程池提供了一些方法来控制其生命周期,如`execute()`用于提交任务,`shutdown()`用于关闭线程池但...
简单实用的java线程池实例代码。包括测试代码和工程文件。
线程池是一种多线程处理形式,通过维护一组可重用线程来提高系统的响应速度和效率。在Linux系统中,实现线程池通常需要掌握以下几个核心知识...通过对这个实例的分析和实践,可以深入理解线程池的工作原理和实际应用。
1.线程池管理器...提供一种缓冲机制。 网上的c/c++线程池多是linux下的,这个是VC6.0的线程池。其涉及的主要文件有:ThreadPoolManage、IThreadExcute、TemporarilyThread、ThreadManage、RegKeyIni。
本资料"Java四种线程池的使用共6页.pdf.zip"详细介绍了Java中四种主要的线程池实现,旨在帮助开发者更有效地利用系统资源,提高程序性能。 首先,我们要了解Java线程池的基本概念。线程池是一种线程使用模式,通过...
**Qt线程池开发实例详解** Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的功能和工具,包括对多线程的支持。在实际应用中,线程池是一种有效的管理并发任务的方式,它可以优化系统资源的利用,...
Java线程池是一种高效管理线程资源的工具,它通过维护一组可重用的线程来减少创建和销毁线程的开销。在Java中,`java.util.concurrent`包提供了`ExecutorService`接口和它的实现类,如`ThreadPoolExecutor`,来支持...
在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下,ThreadPool最大可建立500个工作线程和1000个I/O线程(根据机器CPU个数和.net framework版本的不同,这些数据可能会有变化) ...
本文将深入探讨这两个主题,并提供一些关于如何在VC++环境中实现多线程和线程池的实例。 首先,我们来理解什么是多线程。在单线程程序中,执行流程是顺序的,而多线程则允许程序同时执行多个独立的执行流。这可以...
在编程领域,线程池是一种优化并发处理的机制,它管理一组预先创建的线程,以便根据需要分配任务,而不是每次需要执行新任务时都创建新的线程。Delphi,作为一个强大的面向对象的编程环境,提供了对线程池的支持,这...
DELPHI的线程池(ThreadPool)是一种高效管理并发任务的技术,它允许程序在需要时创建线程,而不是每次需要执行任务时都手动创建。线程池通过预先创建一组线程,然后根据需要分配任务,减少了线程创建和销毁的开销,...
在Delphi编程环境中,线程池(ThreadPool)是一种高级并发编程技术,用于高效地管理和调度多个后台任务。线程池可以提高系统性能,因为它减少了创建和销毁线程的开销,使得线程的创建和销毁变得更为高效。...
线程池是一种管理线程资源的有效方式,通过预先创建并维护一定数量的线程来处理任务,而不是每次需要执行新任务时都创建新线程。这样可以避免频繁创建和销毁线程带来的性能开销,提高系统效率。 线程池的基本工作...
在"IOCPNet线程池实例"中,我们可以了解到如何将这两种技术结合起来,构建一个高性能的网络服务。IOCPNetTest可能是项目的主要测试程序,用于验证IOCP和线程池的集成效果。workframe可能包含了整个工作框架,包括了...
"java简单实现多线程及线程池实例详解" 在java中,多线程是指在一个程序中可以同时运行多个线程,以提高程序的执行效率和性能。java提供了两种方式来实现多线程,即继承Thread类和实现Runnable接口。 继承Thread类...