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
线程池的作用: 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他...
比较完整的线程池实例代码,Linux系统下完美运行
包含DEMO(ThreadPoolDemo.rar),源代码 thread_pool.rar(只有一个HPP文件)及经过裁减的Boost1.32库;之后以用Boost是因为ThreadPool中用到了 Boost库的线程组件。 关键字:thread,pool,线程池
一个简单的线程池示例,可以自定义线程数量和执行任务,代码简洁可扩展性强。在使用上也很方便。下面是一个简单的调用 int main() { xcyk::ThreadPool threadPool("xcyk"); SYSTEM_INFO SystemInfo; ...
这是基于c#的线程池示例,应用于多线程等等
简单演示了如何使用线程池,可以再源代码的基础上进行修改进行更高级的操作,适合用于学习
取自卢伟的专栏DELPHI 线程池代码(http://blog.csdn.net/babyvspp/archive/2008/01/01/2008234.aspx),封装的十分完美,用法也非常简单,可以根据使用者设定的初始工作线程数和最大线程数以及线程执行时间自动增加...
Java 线程池示例 一个简单的 Java 线程池示例
g++ -o test quickstart.cpp -lboost_system -lboost_thread -lpthread
C实现的线程池,示例展示如何在应用程序中使用线程池,以及实现线程池可以如何提高应用程序的性能。
封装好的线程池稳定版本,可直接使用,包含线程池的库代码和一个简单的使用示例。对于一般任务,性能上足够了。
Linux高级程序设计 第三版 源码(示例代码)(杨宗德),和课本上的代码是完全一样的,希望大家下载。
内容索引:VC/C++源码,系统相关,连接池,多线程 VC++写的线程池示例,运行后可以看到线程的数目在变化,截图如上,VC编程朋友参阅一下。
主要介绍了Spring Boot整合FTPClient线程池的实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
通过1个简单的VC例程,演示了线程池的使用方法,以及线程池的函数用法。代码为VS2015工程,可直接打开编译。
三、简单的C++线程池代码示例 四、 基于boost编写的源码库 - 线程池 4.1 基于boost编写的源码库地址 4.2 boost线程池的先进先出、后进先出、优先级代码示例 五、看看人家线程池怎么写的 - 要理解精髓 六、线程池应用...
TCP SOCKET多线程通信,使用.NET自带线程池,高效率 ,可用来测试端口防火墙等,注释详细,