`
myqhit
  • 浏览: 64645 次
社区版块
存档分类
最新评论

ThreadPool

    博客分类:
  • java
阅读更多
package org.xml.upload;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class SaveReviewThreadPool {
    private ArrayList pool=new ArrayList();
//    private List pool = Collections.synchronizedList(new ArrayList());// 线程连接存放容器

    private int minThread = 20;// 最小的线程数

    private int delayTime = 611;// 刷新线程容器的时间间隔

    private int requestThread = 0;// 当前的线程数

    private int incrementThreads = 2;// 每次添加的线程

    public int getDelayTime() {
        return delayTime;
    }

    public void setDelayTime(int delayTime) {
        this.delayTime = delayTime;
    }

    public int getMinThread() {
        return minThread;
    }

    public void setMinThread(int minThread) {
        this.minThread = minThread;
    }

    public List getPool() {
        return pool;
    }

    public void setPool(ArrayList pool) {
        this.pool = pool;
    }

    public int getIncrementThreads() {
        return incrementThreads;
    }

    public void setIncrementThreads(int incrementThreads) {
        this.incrementThreads = incrementThreads;
    }

    public int getRequestThread() {
        return requestThread;
    }

    public void setRequestThread(int requestThread) {
        this.requestThread = requestThread;
    }

    public SaveReviewThreadPool() {

    }

    @SuppressWarnings("unchecked")
    public void config() {
        if (requestThread <= minThread) {
            requestThread = minThread;
        }
        pool = new ArrayList();
        for (int i = 0; i < requestThread; i++) {// 初始化线程连接池
            SaveReviewThread thread = new SaveReviewThread();
            pool.add(thread);
        }
    }

    public SaveReviewThread getThread() {
       
            if (pool == null) { // 如果线程容器为空则新建一个
                pool = new ArrayList();
                this.addThread();
            }

            SaveReviewThread thread = findThread();// 在此等候知道能够获得一个有用的线程
            while (thread == null) {
                wait(delayTime);
                System.out.println("正在等候有用的文件保存线程");
                thread = findThread();
            }
            System.out.println("成功获得一个文件保存线程");
            return thread;
            }

    public SaveReviewThread findThread() {
   
        SaveReviewThread thread = null;
        synchronized (pool) {

            Iterator iter = pool.iterator();// 对线程容器进行跌代,找出一个存在的线程
            while (iter.hasNext()) {
                thread = (SaveReviewThread) iter.next();
                if (thread != null) {
                    break;
                }

            }
            pool.remove(thread);

        }
        return thread;
    }

    @SuppressWarnings("unchecked")
    public void addThread() {// 每次运行完一个进程,需要向进程池里添加的进程数量
        synchronized (pool) {
            if (pool.size() < requestThread) {
                for (int i = 0; i < incrementThreads; i++) {
                    SaveReviewThread newThread = new SaveReviewThread();
                    pool.add(newThread);
                    if (pool.size() >= requestThread) {
                        return;
                    }
                }

            }
        }
    }

    private void wait(int mSeconds) {

        try {

            Thread.sleep(mSeconds);

        } catch (InterruptedException e) {

        }

    }

}
分享到:
评论

相关推荐

    threadpool

    线程池(threadpool)是计算机程序中一种有效的多线程处理形式,它预先创建一组线程,待有任务需要执行时,从线程池中取出一个线程来执行任务,任务完成后,线程并不销毁,而是返回线程池等待下一次的任务分配。...

    Boost threadpool优先级实例

    Boost库是C++编程语言中的一个流行开源库,提供了丰富的功能,其中包括线程池(Boost.Threadpool)模块。本文将深入探讨如何使用Boost库中的线程池来处理具有优先级的任务,以及普通任务的执行。 首先,我们需要...

    C++11 线程池 ThreadPool

    线程池(ThreadPool)是一种管理线程资源的有效方式,它在现代并发编程中扮演着至关重要的角色。线程池允许程序预先创建一组线程,而不是每次需要时都创建新的线程,这样可以减少线程的创建和销毁开销,提高系统效率...

    threadpool.tar.gz

    在"threadpool.tar.gz"压缩包中,包含两个文件:threadpool.cc和threadpool.h,它们很可能是实现线程池的源代码文件。这里我们将详细讨论C++11引入的线程库以及如何在Linux/MacOS平台上利用这些新特性构建线程池。 ...

    Pythonpython threadpool python多线程 Python语言基础

    【Python】python threadpool python多线程 Python语言基础 文件清单 └── threadpool-1.2.7 ├── CHANGELOG.txt ├── doc │ ├── api │ │ ├── class-tree.html │ │ ├── epydoc.css │ │...

    C# ThreadPool 多线程 代码示例

    在.NET框架中,`ThreadPool`是一个非常重要的概念,它是一个预先初始化的线程集合,用于高效地执行异步任务。`ThreadPool`管理线程的创建和销毁,优化系统资源的使用,尤其适合处理大量短生命周期的任务。本示例将...

    ThreadPool 线程池管理单元

    ThreadPool 线程池管理单元 带调用例子

    threadpool_src.zip

    标题 "threadpool_src.zip" 暗示了这是一个关于线程池实现的源代码压缩包。线程池是一种多线程编程中的管理机制,它允许高效地管理和调度多个并发任务,通过预先创建并维护一组可重用的工作线程来提高系统资源利用率...

    ThreadPool-master.zip

    `ThreadPool-master.zip`中的项目提供了一个线程池的实现示例,旨在帮助程序员理解线程池的调度和管理机制。 线程池的基本思想是预先创建一定数量的线程,这些线程等待待处理的任务。当有新任务到来时,线程池会将...

    C# Thread、ThreadPool、Task测试

    在C#编程中,线程(Thread)、线程池(ThreadPool)和任务(Task)是并行处理和异步操作的重要组成部分。理解它们的工作原理和使用方法对于优化应用程序的性能至关重要。下面将详细阐述这三个概念及其相关知识点。 ...

    线程池threadpool_src

    通过分析和理解“线程池threadpool_src”的源代码,开发者可以学习如何自定义线程池,如何优化任务调度策略,以及如何在多线程环境下保证程序的稳定性和效率。同时,了解线程池的工作原理对于提升软件的并发处理能力...

    boost threadpool(修复内存泄露后的版本)

    Boost Threadpool库是一个高效、灵活且可定制的线程池实现,它被广泛用于多线程编程中,特别是在C++环境中。线程池允许开发者管理一组预创建的线程,而不是为每个任务创建新的线程,这能显著提高程序性能并减少系统...

    Tomat研究之ThreadPool

    主要类包括`ThreadWithAttributes`、`ControlRunnable`、`ThreadPool`、`MonitorRunnable`和`ThreadPoolListener`等,这些类构成了线程池的主要框架。 1. **`ThreadWithAttributes`**:这个类负责设置和获取线程...

    DELPHI的ThreadPool的线程池DEMO

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

    QT_ThreadPool.rar

    QT_ThreadPool是一个基于QT5框架实现的线程池项目,旨在提供一种高效、灵活的多线程处理方式。线程池是一种线程管理机制,它预先创建一组线程,待有任务需要执行时,从线程池中分配线程来执行任务,而不是每次任务...

    threadPool的实现代码

    threadPool的实现代码

Global site tag (gtag.js) - Google Analytics