`

四种线程池实例

阅读更多
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 四种线程池实例

    本文将深入探讨四种常见的Java线程池实例:`ThreadPoolExecutor`、`Executors`提供的固定线程池、单线程池和定时线程池。 1. **ThreadPoolExecutor**: 这是最基础也是最灵活的线程池实现,可以通过`new ...

    spring 线程池实例

    在Java编程中,Spring框架提供了一种优雅的方式来管理和执行异步任务,这就是Spring的线程池。线程池是多线程编程中的一个重要概念,它能够有效地管理并发任务的执行,提高系统的性能和效率。本实例将深入探讨Spring...

    C++线程池实例

    本文将深入探讨“C++线程池实例”中的关键知识点,包括线程池的概念、实现原理以及如何在VC6.0环境下进行编译和应用。 线程池是一种线程使用模式,它预先创建了一组可重用的工作线程,这些线程由线程池统一管理和...

    一个完整的线程池的实例

    线程池是一种基于池化思想的设计模式,用于管理和复用一组预先创建好的线程。通过线程池可以有效地控制运行中的线程数量,并重用空闲线程处理新任务,从而减少了创建和销毁线程带来的开销。线程池通常包括以下几个...

    四大线程池的用法实例

    Java的`java.util.concurrent`包提供了四种主要的线程池实现:`Executors.newFixedThreadPool()`, `Executors.newSingleThreadExecutor()`, `Executors.newCachedThreadPool()`以及`Executors.newWorkStealingPool()...

    java线程池实例详细讲解

    Java提供了四种预定义的拒绝策略,如抛出异常、忽略任务、调用系统关机钩子或自定义策略。 5. **生命周期管理**:线程池提供了一些方法来控制其生命周期,如`execute()`用于提交任务,`shutdown()`用于关闭线程池但...

    Java线程池实例

    简单实用的java线程池实例代码。包括测试代码和工程文件。

    线程池实例(Linux)

    线程池是一种多线程处理形式,通过维护一组可重用线程来提高系统的响应速度和效率。在Linux系统中,实现线程池通常需要掌握以下几个核心知识...通过对这个实例的分析和实践,可以深入理解线程池的工作原理和实际应用。

    VC简单的线程池使用实例

    1.线程池管理器...提供一种缓冲机制。 网上的c/c++线程池多是linux下的,这个是VC6.0的线程池。其涉及的主要文件有:ThreadPoolManage、IThreadExcute、TemporarilyThread、ThreadManage、RegKeyIni。

    Java四种线程池的使用共6页.pdf.zip

    本资料"Java四种线程池的使用共6页.pdf.zip"详细介绍了Java中四种主要的线程池实现,旨在帮助开发者更有效地利用系统资源,提高程序性能。 首先,我们要了解Java线程池的基本概念。线程池是一种线程使用模式,通过...

    Qt实现线程池开发实例

    **Qt线程池开发实例详解** Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的功能和工具,包括对多线程的支持。在实际应用中,线程池是一种有效的管理并发任务的方式,它可以优化系统资源的利用,...

    java线程池实例

    Java线程池是一种高效管理线程资源的工具,它通过维护一组可重用的线程来减少创建和销毁线程的开销。在Java中,`java.util.concurrent`包提供了`ExecutorService`接口和它的实现类,如`ThreadPoolExecutor`,来支持...

    C#线程池实例 线程池和文件下载服务器

    在C#中可以通过System.Threading.ThreadPool类来实现,在默认情况下,ThreadPool最大可建立500个工作线程和1000个I/O线程(根据机器CPU个数和.net framework版本的不同,这些数据可能会有变化) ...

    多线程线程池实例及相关资料

    本文将深入探讨这两个主题,并提供一些关于如何在VC++环境中实现多线程和线程池的实例。 首先,我们来理解什么是多线程。在单线程程序中,执行流程是顺序的,而多线程则允许程序同时执行多个独立的执行流。这可以...

    delphi线程池实例

    在编程领域,线程池是一种优化并发处理的机制,它管理一组预先创建的线程,以便根据需要分配任务,而不是每次需要执行新任务时都创建新的线程。Delphi,作为一个强大的面向对象的编程环境,提供了对线程池的支持,这...

    DELPHI的ThreadPool的线程池DEMO

    DELPHI的线程池(ThreadPool)是一种高效管理并发任务的技术,它允许程序在需要时创建线程,而不是每次需要执行任务时都手动创建。线程池通过预先创建一组线程,然后根据需要分配任务,减少了线程创建和销毁的开销,...

    delphi线程池mcpage实例

    在Delphi编程环境中,线程池(ThreadPool)是一种高级并发编程技术,用于高效地管理和调度多个后台任务。线程池可以提高系统性能,因为它减少了创建和销毁线程的开销,使得线程的创建和销毁变得更为高效。...

    一个简单的线程池例子

    线程池是一种管理线程资源的有效方式,通过预先创建并维护一定数量的线程来处理任务,而不是每次需要执行新任务时都创建新线程。这样可以避免频繁创建和销毁线程带来的性能开销,提高系统效率。 线程池的基本工作...

    IOCPNet线程池实例

    在"IOCPNet线程池实例"中,我们可以了解到如何将这两种技术结合起来,构建一个高性能的网络服务。IOCPNetTest可能是项目的主要测试程序,用于验证IOCP和线程池的集成效果。workframe可能包含了整个工作框架,包括了...

    java简单实现多线程及线程池实例详解

    "java简单实现多线程及线程池实例详解" 在java中,多线程是指在一个程序中可以同时运行多个线程,以提高程序的执行效率和性能。java提供了两种方式来实现多线程,即继承Thread类和实现Runnable接口。 继承Thread类...

Global site tag (gtag.js) - Google Analytics