`
85977328
  • 浏览: 1898762 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程池的用法

阅读更多
    为什么用线程池呢?
    这个问题很容易理解。池者,容器也。线程池把设置到池中的线程管理起来。提高了系统的稳定性和线程的可控性。下面是本人写的一个线程小例子,通过Timer来反应线程池的机制。
package phl;

import java.io.Serializable;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * phl 2010-4-24
 * 这段程序演示了线程池 和定时线程的作用关系
 * 本例中,线程池只允许一个线程执行,其他线程将加到队列中等待执行.
 *
 */
public class Timer_ThreadPoolExecutor {
	
	/**
	ThreadPoolExecutor(
	int corePoolSize, 
	int maximumPoolSize,
	long keepAliveTime, 
	TimeUnit unit,
	BlockingQueue<Runnable> workQueue,
	RejectedExecutionHandler handler)
	                         
	corePoolSize: 线程池维护线程的最少数量
	maximumPoolSize:线程池维护线程的最大数量
	keepAliveTime:线程池维护线程所允许的空闲时间
	unit: 线程池维护线程所允许的空闲时间的单位
	workQueue:线程池所使用的缓冲队列
	handler: 线程池对拒绝任务的处理策略
	 */	
//方法一:不推荐
	private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
			1, 
			1,
			3, 
			TimeUnit.SECONDS, 
			new ArrayBlockingQueue<Runnable>(3),
			new ThreadPoolExecutor.DiscardOldestPolicy());
//方法二:推荐使用这种方法
private ExecutorService threadPool2 = Executors.newFixedThreadPool(5);

	public static void main(String[] args) throws Exception {
		
		Timer timer1 = new Timer();
		TimerTask task1 = new TimerTask() {
			public void run() {
				threadPool.execute(new ThreadTask("11111 timer1"));
			}
		};
		timer1.schedule(task1, 0, 1000 * 5);

		
		Timer timer2 = new Timer();
		TimerTask task2 = new TimerTask() {
			public void run() {
				threadPool.execute(new ThreadTask("22222 timer2"));
			}
		};
		timer2.schedule(task2, 0, 1000 * 5);
	}
}

class ThreadTask implements Runnable, Serializable {
	private String name = "";

	public ThreadTask(String name) {
		this.name = name;
	}

	public void run() {
		for (int i = 0; i < 5; i++) {
			System.out.println(name + " is running!");
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
0
0
分享到:
评论
2 楼 finallygo 2010-06-16  
想问下,如何用jdk1.4实现线程池呢?
1 楼 mercyblitz 2010-06-15  
为什么不用java.util.concurrent.ScheduledThreadPoolExecutor?

相关推荐

    Delphi mcpage 线程池用法实例.rar

    在Delphi编程环境中,线程池是一种非常重要的...通过深入学习和实践这个`Delphi mcpage 线程池用法实例`,开发者可以更好地理解和掌握线程池的原理和实际操作,从而在自己的项目中有效利用多线程技术,提升软件性能。

    四大线程池的用法实例

    接下来,我们将详细探讨这四大线程池的特点、用法及适用场景。 1. **固定大小线程池(newFixedThreadPool)** - 创建方法:`Executors.newFixedThreadPool(int nThreads)` - 特点:线程池大小固定,当所有工作...

    多线程写法(精易模块线程池和鱼刺模块线程池)

    本篇文章将重点探讨两种线程池实现:精易模块线程池和鱼刺模块线程池,并通过源码分析来展示它们的特点和用法。 首先,精易模块(SanYe Module)是由中国程序员SanYe开发的一系列开源模块,其中包含了线程池的实现...

    线程池用法

    按先后顺序执行线程 public static void main(String[] args) { ExecutorService t = Executors.newSingleThreadExecutor(); for (int i = 0; i ; i++) { t.submit(new AA(i));... System.out.println(...

    浅谈Spring @Async异步线程池用法总结

    浅谈Spring @Async异步线程池用法总结 本文主要介绍了Spring @Async异步线程池的用法总结,包括异步线程池的接口类、@Async定义异步任务、Spring开启异步配置等内容。 1. 异步线程池的接口类 Spring提供了多种...

    Java线程池用法实战案例分析

    Java线程池用法实战案例分析 Java线程池是Java并发编程中的一种重要机制,用于管理和执行多个线程,以提高程序的并发性和性能。在本文中,我们将通过实战案例来剖析Java线程池的用法,包括线程池的创建、使用和终止...

    java线程池使用后到底要关闭吗

    关闭线程池可以使用shutdown()或shutdownNow()方法。shutdown()方法将等待所有任务执行完毕后销毁线程,而shutdownNow()方法将立即结束所有线程,不管是否正在运行,并返回未执行完毕的任务列表。 使用java线程池时...

    Qt线程池+多线程使用

    本篇文章将详细探讨Qt线程池的使用以及如何实现多线程间的通信。 首先,让我们了解什么是Qt线程池。Qt中的线程池由`QThreadPool`类实现,它可以管理一组线程,并根据需要分配任务。当一个任务被提交到线程池时,...

    C# 线程池使用示例

    在VS2013环境下,结合控制台窗口,我们可以轻松地实现线程池的使用。下面将详细探讨C#线程池的工作原理、优势以及如何在实际项目中应用。 线程池的基本概念: 线程池是一组预先创建的线程,这些线程由操作系统维护...

    c#线程池使用demo

    在本示例"C#线程池使用demo"中,我们将探讨如何利用线程池来执行任务,以及其背后的原理和最佳实践。 首先,线程池主要由System.Threading命名空间下的ThreadPool类提供。在C#中,我们可以通过以下方式向线程池提交...

    java 线程池常用方法

    当不再需要线程池时,应通过`ExecutorService`的`shutdown()`方法优雅地关闭线程池。这个方法不会立即终止所有线程,而是不再接受新任务,待当前任务完成后,线程池才会关闭。如果希望立即停止所有任务,可以使用`...

    C++线程池实现 vc2015编译

    在C++编程中,线程池是一种管理线程的有效机制,它可以提高程序的并发性能,减少线程创建和销毁的开销。线程池的概念基于池化资源的思想,即预先创建一组线程,当需要执行任务时,从池中获取空闲线程,而不是每次都...

    Java线程池使用说明

    1. Executor:它是Java中线程池的顶级接口,定义了执行线程的抽象方法,但它本身并不直接提供线程池功能。 2. ExecutorService:是真正的线程池接口,提供了一系列方法来管理线程的生命周期以及任务的执行。 3. ...

    Python 线程池用法简单示例

    本文实例讲述了Python 线程池用法。分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python3 ''' Created on 2019-10-2 @author: Administrator ''' from concurrent.futures import ...

    如何使用线程池

    以下示例显示如何使用线程池。首先创建 ManualResetEvent 对象,此对象使程序能够知道线程池何时运行完所有的工作项。接着,尝试向线程池添加一个线程。如果添加成功,则添加其余的线程(本例中为 4 个)。然后...

    C#线程池用法详细介绍

    此外,还可以使用其他方法,如 `ThreadPool.UnsafeQueueUserWorkItem` 或 `ThreadPool.BindHandle` 来实现特定的线程池功能。对于更复杂的并发控制,可以使用 `Task` 类和 `Task Parallel Library (TPL)`,这是 .NET...

    四种Java线程池用法解析

    例如,可以使用`scheduleAtFixedRate`或`scheduleWithFixedDelay`方法来实现定时任务。 4. `newSingleThreadExecutor`: 创建一个单线程的线程池,所有的任务都会按照提交的顺序在一个单独的工作线程中依次执行。...

    线程池  

    `ThreadPool`类的构造函数可以初始化线程池,`addTask`方法用于添加任务,`run`方法调度并执行任务,而`shutdown`方法则用于关闭线程池并清理资源。 线程池的使用场景广泛,如在网络I/O、数据库操作、定时任务、...

    线程池使用Demo

    线程池的关闭也很重要,使用`shutdown()`方法会停止接收新任务但会执行已提交的任务,而`shutdownNow()`则会尝试停止所有正在执行的任务。 在实际应用中,选择合适的线程池配置和优化是性能调优的关键。需要考虑的...

    线程池管理多线程上传

    - **提交任务**:使用`ExecutorService`的`execute()`方法提交`Runnable`或`Callable`任务。 - **线程调度**:线程池会根据预设策略决定何时运行新任务,可能立即执行或等待其他任务完成。 - **关闭线程池**:...

Global site tag (gtag.js) - Google Analytics