最近工作比较闲写了段java线程池方面的东西。别的不说了上代码。
工作线程Woker.java
/**
* @author pxd
*
*/
public class Worker extends Thread {
public boolean isrunning;
public synchronized void setIsRunning(boolean flag){
this.isrunning=flag;
if(flag){
this.notify();
}
}
public boolean getIsrunning() {
return isrunning;
}
public Worker(){
super();
}
public synchronized void run(){
System.out.println("线程"+this.getName()+"初始化成功");
while(true){
if(!isrunning){
try {
System.out.println("工人"+this.getName()+"任务完成回归线程池");
this.wait();
} catch (InterruptedException e) {
System.out.println("线程被阻挡");
e.printStackTrace();
}
}else{
System.out.println("工人"+this.getName()+"开始工作");
try {
this.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("工人"+this.getName()+"任务完成开始休息");
setIsRunning(false);
}
}
}
}
//PoolManage.java 线程池类
import java.util.ArrayList;
import java.util.HashMap;
/**
* @author pxd
*
*/
public class PoolManage {
public int max_pool;
public ArrayList<Worker> init_pools;
public void setMaxPool(int num){
this.max_pool=num;
}
public PoolManage(int num){
setMaxPool(num);
System.out.println("线程池初始化开始。。。");
init_pools=new ArrayList();
for(int i=0;i<this.max_pool;i++){
Worker worker=new Worker();
worker.setName("worker_"+i);
init_pools.add(worker);
worker.start();
}
}
public void process(ArrayList s){
int i;
for(i=0;i<max_pool;i++){
Worker working=init_pools.get(i);
if(!working.isrunning){
System.out.println("工作将由闲置线程"+working.getName()+"执行");
working.setIsRunning(true);
return;
}
}
if(i==max_pool){
System.out.println("线程池无空闲线程,请稍候访问");
}
}
/*public static void main(String[] args){
PoolManage poolManage=new PoolManage(10);
}*/
}
//服务器类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
import java.util.ArrayList;
import java.util.HashMap;
/**
* @author pxd
*
*/
public class Server {
//public ServerSocket ssocket;
PoolManage pool;
public Server(int num){
pool=new PoolManage(num);//初始化线程池
try{
ServerSocket ssocket=new ServerSocket(2000);
Socket socket=ssocket.accept();
System.out.println("客户端连接成功");
BufferedReader bf=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
String s=null;
while(true){
s=bf.readLine();
//System.out.println("s= "+s);
ArrayList msg=new ArrayList();
msg.add(msg);
pool.process(msg);
}
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
new Server(5);
}
}
//客户端类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
/**
* @author pxd
*
*/
public class Clients {
public static void main(String[] args){
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String s;
try {
Socket socket=new Socket("127.0.0.1",2000);
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader sr=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
while((s=sr.readLine())!=null){
out.println(s);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
本文将深入探讨四种常见的Java线程池实例:`ThreadPoolExecutor`、`Executors`提供的固定线程池、单线程池和定时线程池。 1. **ThreadPoolExecutor**: 这是最基础也是最灵活的线程池实现,可以通过`new ...
简单实用的java线程池实例代码。包括测试代码和工程文件。
Java线程池是一种高效管理线程资源的工具,它能够帮助开发者有效地控制并调度线程,从而提升系统性能,减少系统资源的浪费。在Java中,`ExecutorService`接口是线程池的主要入口,它是`java.util.concurrent`包的一...
Java线程池是一种高效管理线程资源的工具,它通过维护一组可重用的线程来减少创建和销毁线程的开销。在Java中,`java.util.concurrent`包提供了`ExecutorService`接口和它的实现类,如`ThreadPoolExecutor`,来支持...
java线程池使用后到底要关闭吗 java线程池是一种高效的并发编程技术,可以帮助开发者更好地管理线程资源,提高系统的性能和可靠性。然而,在使用java线程池时,一个常见的问题是:使用完线程池后到底要不要关闭?...
2. **创建线程池实例**:根据配置参数,使用`ThreadPoolExecutor`构造函数创建线程池实例。 3. **提供提交任务接口**:封装`ExecutorService`的`execute()`方法,对外提供统一的任务提交接口。 4. **异常处理**:...
5. Executors:包含了一系列静态工厂方法,用于生成不同类型的线程池实例。 常见的线程池实现包括: 1. newSingleThreadExecutor():创建一个单线程的线程池,保证任务按提交顺序串行执行。 2. ...
要理解`java线程池threadpool简单使用源码`,你需要查看`src`目录下的Java文件,了解如何实例化`ThreadPoolExecutor`,设置相关参数,以及如何提交任务到线程池。同时,查看源码中对`ThreadGroup`的使用,理解它如何...
Java线程池是一种高效管理线程的机制,它允许开发者预先设定线程的数量,并通过池化的方式重用已创建的线程,以提高系统性能,减少线程的创建和销毁开销。线程池在Java中是通过`java.util.concurrent`包下的`...
Java线程池是一种高效管理线程的技术,它可以帮助开发者更好地控制并发执行的任务,避免频繁创建和销毁线程带来的开销。在Java中,线程池的实现主要通过`java.util.concurrent`包中的`ExecutorService`接口及其具体...
Java线程池是一种高效管理并发任务的机制,它允许开发者预先配置一定数量的线程,以便在处理多个并发任务时能有效地复用这些线程,从而避免了频繁创建和销毁线程带来的开销。在Java中,`java.util.concurrent`包下的...
在上面的代码中,我们创建了一个线程池配置类,使用 @Bean 注解创建了一个线程池实例,该实例具有 5 个核心线程,10 个最大线程,闲置线程存活 60 秒,使用 ArrayBlockingQueue 作为任务队列。 总结 在 Spring ...
1. **创建线程池**:首先,我们需要创建一个线程池实例。通常,我们可以根据实际需求设置线程池参数。例如,如果数据量大且系统资源充足,可以适当增加线程数量;反之,若系统资源有限,应控制线程数量,避免资源...
本文所提及的基于Java线程池技术的数据爬虫设计与实现,不仅涉及到了数据爬虫的原理和架构,还包括了多线程编程的知识点,以及线程池技术在数据爬虫中的具体应用。 首先,数据爬虫的基本原理是模拟用户的点击行为,...
### Java线程池详解 #### 一、线程与线程池的概念 在Java中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程(例如某个Java应用)至少有一个线程,如果线程...
在Java编程中,Spring框架提供了一种优雅的方式来管理和执行异步任务,这就是Spring的线程池。线程池是多线程编程中的一个重要概念,它能够有效地管理并发任务的执行,提高系统的性能和效率。本实例将深入探讨Spring...
Java线程池与反射机制是Java编程中两个重要的概念,它们在实际开发中扮演着至关重要的角色。线程池能够有效地管理和控制并发执行的任务,而反射机制则允许我们在运行时动态地访问和修改类的信息。 首先,让我们深入...
JAVA线程池介绍以及简单实例,代码加文档 。原始资源连接 https://wenku.baidu.com/view/a3d09d0316fc700abb68fce9.html?from=search