package com.abc.test.thread;
public class SimpleThread extends Thread {
private boolean runningFlag;
private String agrs;
public boolean isRunningFlag() {
return runningFlag;
}
public synchronized void setRunningFlag(boolean runningFlag) {
this.runningFlag = runningFlag;
if (runningFlag) {
this.notify();
}
}
public String getAgrs() {
return agrs;
}
public void setAgrs(String agrs) {
this.agrs = agrs;
}
public SimpleThread(int threadNumber) {
runningFlag = false;
System.out.println("线程" + threadNumber + "启动了......");
}
public synchronized void run() {
try {
while (true) {
if (!runningFlag) {
this.wait();
} else {
System.out.println("处理" + getAgrs() + "......");
Thread.sleep(5000);
System.out.println("线程睡眠了......");
setRunningFlag(false);
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.abc.test.thread;
import java.util.ArrayList;
import java.util.List;
public class ThreadPoolManager {
// 最大线程数
private int maxThread;
@SuppressWarnings("unchecked")
private List list;
public void setMaxThread(int maxThread) {
this.maxThread = maxThread;
}
@SuppressWarnings("unchecked")
public ThreadPoolManager(int maxThread){
this.setMaxThread(maxThread);
System.out.println("线程池启动了......");
list = new ArrayList();
for(int i=0;i<10;i++){
SimpleThread st = new SimpleThread(i);
list.add(st);
st.start();
}
}
public void process(String args){
int i;
for(i=0;i<list.size();i++){
SimpleThread curThread = (SimpleThread)list.get(i);
if(! curThread.isRunningFlag()){
System.out.println("线程"+i+"处理"+args);
curThread.setAgrs(args);
curThread.setRunningFlag(true);
return;
}
}
if(i == list.size()){
System.out.println("线程池已经满了,请等待另一个时间!");
}
}
}
package com.abc.test.thread;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestMultThreadPool {
public static void main(String[] args) {
try {
ThreadPoolManager manager = new ThreadPoolManager(10);
System.out.println("请输入字符:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = "";
while ((str = bf.readLine()) != null) {
manager.process(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
NULL 博文链接:https://yulincqupt.iteye.com/blog/1673919
线程池的作用: 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他...
在"MyLinuxThread"这个文件中,很可能包含了线程池的具体实现代码,可以从中学习如何在Linux环境下创建、管理和使用线程池,以及如何处理线程间的同步和通信问题。通过对这个实例的分析和实践,可以深入理解线程池的...
包含DEMO(ThreadPoolDemo.rar),源代码 thread_pool.rar(只有一个HPP文件)及经过裁减的Boost1.32库;之后以用Boost是因为ThreadPool中用到了 Boost库的线程组件。 关键字:thread,pool,线程池
在提供的"线程池示例"文件中,应该包含了创建和使用线程池的代码示例,你可以参考并进行扩展,例如添加更多任务、调整线程池参数,或者实现自定义的线程工厂和拒绝策略,以加深对线程池的理解。
一个简单的线程池示例,可以自定义线程数量和执行任务,代码简洁可扩展性强。在使用上也很方便。下面是一个简单的调用 int main() { xcyk::ThreadPool threadPool("xcyk"); SYSTEM_INFO SystemInfo; ...
下面将详细解释线程池的工作原理以及如何通过代码实现一个简单的线程池示例。 线程池的基本工作流程如下: 1. **初始化**: 创建线程池,设置线程数量、任务队列大小等参数。 2. **提交任务**: 当有新的任务需要...
`quickstart.cpp` 文件很可能是线程池实现的一个快速入门示例,它可能包含了如何创建、使用线程池以及处理任务的代码。`threadpool.hpp` 可能是线程池类的头文件,定义了线程池的相关接口和数据结构,而 `threadpool...
// 这里编写你的任务代码 }); ``` 2. `ThreadPool.GetMaxThreads`: 获取线程池的最大线程数,包括工作线程和IO完成端口线程。 3. `ThreadPool.SetMaxThreads`: 设置线程池的最大线程数。但通常不建议直接修改,...
总之,`uThreadPool线程池示例`是一个很好的学习资源,它演示了如何利用线程池处理大型计算任务,同时展示了多线程编程中的并发控制和任务调度。对于想要提升并发编程能力的开发者来说,这是一个值得研究的案例。
该线程池类为初学者提供了一个良好的学习示例,有助于理解线程池的基本原理和在C++中的具体应用。 #### 二、核心结构与功能 `CThreadPoolExecutor` 类作为线程池的核心,主要负责管理线程的数量、任务队列的维护...
取自卢伟的专栏DELPHI 线程池代码(http://blog.csdn.net/babyvspp/archive/2008/01/01/2008234.aspx),封装的十分完美,用法也非常简单,可以根据使用者设定的初始工作线程数和最大线程数以及线程执行时间自动增加...
示例代码: ```csharp using System; using System.Threading; class Program { static void Main(string[] args) { // 提交任务到线程池 ThreadPool.QueueUserWorkItem(new WaitCallback(YourMethod)); ...
如果是一个示例项目,可能还会有使用线程池的代码片段,帮助开发者理解如何在实际应用中配置和使用这个线程池。 总之,使用I/O完成端口机制的线程池在处理大量I/O密集型任务时能展现其优势,特别是在网络服务器、...
3. 示例代码:可能包含一个或多个示例,展示如何在实际应用中使用这个线程池库。 通过阅读和理解这些源码,开发者可以学习到如何在C语言中高效地管理和使用线程,以及如何通过线程池优化并发执行的任务,从而提升...
在`demo.cpp`中,我们可以看到线程池的使用示例: 1. **创建线程池**:根据需求实例化线程池对象,设置线程池的大小。 2. **提交任务**:使用线程池提供的接口,向线程池提交多个任务。这些任务可以是自定义的函数...
在"threadpool_leather5mg_rocket38x_工作线程的完整代码"中,我们可能找到了一个实现了线程池管理功能的代码示例。线程池的基本工作原理是预先创建一定数量的线程,当有任务需要执行时,线程池会从空闲线程中选取一...
Examples 文件夹中可能包含了使用线程池的示例代码,这些示例有助于开发者理解和学习如何在自己的项目中应用线程池。通过查看这些例子,我们可以了解如何提交任务到线程池,如何等待所有任务完成,以及如何处理...