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

线程池2

阅读更多
package interview.pool2;

import interview.pool.ThreadPool;

import java.util.ArrayList;
import java.util.LinkedList;

public class ThreadPool2
{
	// 线程数
	public static int NUM = 5;

	// 线程集合
	private ArrayList threads = new ArrayList();

	// 任务集合
	private LinkedList<Task> tasks = new LinkedList<Task>();

	private static final ThreadPool2 iNSTANCE = new ThreadPool2();

	public static ThreadPool2 getInstance()
	{
		return iNSTANCE;
	}

	// 初始化
	public ThreadPool2()
	{
		for (int i = 0; i < NUM; i++)
		{
			Worker worker = new Worker();
			threads.add(worker);
			worker.start();
		}
	}

	/**
	 * 执行方法
	 */
	public void execute(Task task)
	{
		synchronized (tasks)
		{
			// 1. 加到任务队列最后面
			tasks.addLast(task);
			// 2.唤醒线程
			tasks.notify();
		}
	}

	/**
	 * 内部类:工作者线程
	 */
	private class Worker extends Thread
	{

		public void run()
		{
			// 局部变量更为合理
			Task task;

			while (true)
			{
				synchronized (tasks)
				{
					if (tasks.isEmpty())
					{
						try
						{
							tasks.wait();
						}
						catch (InterruptedException e)
						{
							e.printStackTrace();
						}
					}
					// 取出第一个任务执行
					task = tasks.removeFirst();
				}

				// 必须将该方法提取到synchronized外面执行
				try
				{
					task.execute();
				}
				catch (Exception ex)
				{
					ex.printStackTrace();
				}
			}
		}
	}
}

 

分享到:
评论

相关推荐

    自定义实现Java线程池2-完善异常处理和去除同步1

    在Java编程中,自定义线程池是一项常见的需求,它可以帮助我们更有效地管理和控制并发执行的任务。本文将讨论如何在自定义线程池中完善异常处理和去除同步,以提高效率和程序的健壮性。 首先,从提供的代码片段来看...

    VC简单的线程池使用实例

    2.工作线程(WorkThread): 线程池中线程 3.任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。 4.任务队列:用于存放没有处理的任务。提供一种缓冲机制。 网上的c/c++线程池多是linux下的,这...

    阻塞线程池 阻塞线程池 阻塞线程池

    阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池阻塞线程池...

    线程池  

    2. **任务队列**:线程池中存放待处理任务的队列,线程从这个队列中取出任务并执行。 3. **工作线程**:预先创建的线程,它们从任务队列中获取任务并执行。 创建线程池的步骤如下: 1. **初始化线程池**:设置...

    C++实现线程池详解(基于boost源码以及封装等线程池)

    一、要实现高效的线程池,可以考虑以下几点 二、实现线程池可以按照以下步骤进行 三、简单的C++线程池代码示例 四、 基于boost编写的源码库 - 线程池 4.1 基于boost编写的源码库地址 4.2 boost线程池的先进先出、...

    仿ACE线程池机制实现的线程池类

    2. 任务类CTask: CTask代表线程池需要处理的业务逻辑。它可以是一个抽象基类,提供统一的接口供工作者线程调用,或者是一个具体的任务类,包含任务的执行代码。用户可以通过继承CTask并重写相关方法来定义自己的...

    Java简单线程池 线程池中文文档

    简单的线程池程序+中文文档 包结构: com.tangkai.threadpool --SimpleThread.java 工作线程 --TestThreadPool.java 程序入口 --ThreadPoolManager.java 线程池管理类

    VC++ 线程池(ThreadPool)实现

    2. 创建线程池工作项:使用`CreateThreadpoolWork`函数定义一个工作项,该工作项包含要执行的函数和其参数。 3. 提交工作项:调用`SubmitThreadpoolWork`函数将工作项放入线程池,等待执行。 4. 工作函数:定义一个...

    Quartz 线程池

    2. **任务分配**:当一个 Trigger 触发时,调度器会从线程池中选择一个空闲线程,分配给 Job 执行。如果所有线程都在忙碌,新的 Trigger 将被暂时挂起,等待线程池中有线程可用。 3. **任务执行**:线程执行 ...

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

    2. 提交任务到线程池,由线程池分配线程执行。 3. 线程池中的线程管理和调度。 4. 监控线程池状态,如运行中的线程数、等待的任务数等。 5. 结束线程池,释放相关资源。 其次,鱼刺模块线程池可能是另一个开源项目...

    C++线程池,带PPT 线程池

    2. 创建线程池类,包含线程数组和任务队列。 3. 在类中实现添加任务到队列的方法,并确保线程安全。 4. 实现线程运行函数,该函数从任务队列中取出任务并执行。 5. 启动线程池,创建线程并开始处理任务。 6. 关闭...

    简单线程池与线程池检查的实现

    标题 "简单线程池与线程池检查的实现" 涉及到的是计算机编程中的多线程管理和优化,特别是线程池的概念及其检查机制。线程池是一种多线程处理形式,预先创建一定数量的线程,放入池中,当有任务需要执行时,直接从池...

    JAVA线程池原理以及几种线程池类型介绍

    2. **CachedThreadPool**:创建一个可根据需要创建新线程的线程池,但在先前构造的线程可用时将重用它们。如果线程闲置时间超过了设定的阈值,线程将被终止。 3. **ScheduledThreadPoolExecutor**:支持定时任务执行...

    一个简单线程池的实现

    2. **任务调度策略**:线程池可以采用不同的策略来决定哪个线程执行哪个任务,如优先级调度、轮询等。 3. **线程同步**:确保线程安全,防止数据竞争,这通常需要用到互斥锁(mutex)、条件变量(condition ...

    线程池线程池线程池线程池

    线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池线程池...

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

    java线程池使用后到底要关闭吗 java线程池是一种高效的并发编程技术,可以帮助开发者更好地管理线程资源,提高系统的性能和可靠性。然而,在使用java线程池时,一个常见的问题是:使用完线程池后到底要不要关闭?...

    Python实现的线程池

    2. **Worker类**:每个工作线程的实例,它们是线程池中的实际执行者,负责运行用户提交的任务。 3. **Task类**:封装用户提交的任务,包含任务的执行逻辑。 4. **Queue类**:用于存储待处理任务的队列,通常使用`...

    windows线程池,使用Windows自带的线程池api功能,比你写的线程池性能好得多

    2. **提交任务**: 可以使用`SubmitWorkItem()`或`QueueUserWorkItem()`等函数将任务添加到线程池,这些函数会把任务封装成工作项,然后放入任务队列。 3. **回调函数**: 每个任务都需要关联一个回调函数,这个函数将...

    C/C++(基于windows)超简单的线程池

    1. 很适合新手学习线程池 2. 没有加锁, 大家要用的话自己加锁 3. 真的超简单, 代码量超少 4. 线程类是接口, 要自己继承才能使用, 里面有例子 5. 如果想加入 "插队" 线程机制, 可以把 STL的quene 换成 list, map等.

    java线程池完整代码

    2. 线程池的创建:使用 `ConsumeThreadPoolPara` 对象创建线程池,设置线程池的最小和最大线程数。 3. 线程池的管理:使用 Timer 定期扫描线程池,防止线程未激活,并使用 `freeThreadCount` 变量来得到空闲线程的...

Global site tag (gtag.js) - Google Analytics