`
psunrise
  • 浏览: 4252 次
  • 性别: Icon_minigender_1
  • 来自: 烟台
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java 线程池实例

阅读更多

最近工作比较闲写了段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();
		}
	}
}

 

1
0
分享到:
评论
1 楼 sxm1220 2012-07-10  
模拟线程池?

相关推荐

    java 四种线程池实例

    本文将深入探讨四种常见的Java线程池实例:`ThreadPoolExecutor`、`Executors`提供的固定线程池、单线程池和定时线程池。 1. **ThreadPoolExecutor**: 这是最基础也是最灵活的线程池实现,可以通过`new ...

    Java线程池实例

    简单实用的java线程池实例代码。包括测试代码和工程文件。

    java线程池实例详细讲解

    Java线程池是一种高效管理线程资源的工具,它能够帮助开发者有效地控制并调度线程,从而提升系统性能,减少系统资源的浪费。在Java中,`ExecutorService`接口是线程池的主要入口,它是`java.util.concurrent`包的一...

    java线程池实例

    Java线程池是一种高效管理线程资源的工具,它通过维护一组可重用的线程来减少创建和销毁线程的开销。在Java中,`java.util.concurrent`包提供了`ExecutorService`接口和它的实现类,如`ThreadPoolExecutor`,来支持...

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

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

    java线程池封装j

    2. **创建线程池实例**:根据配置参数,使用`ThreadPoolExecutor`构造函数创建线程池实例。 3. **提供提交任务接口**:封装`ExecutorService`的`execute()`方法,对外提供统一的任务提交接口。 4. **异常处理**:...

    Java线程池使用说明

    5. Executors:包含了一系列静态工厂方法,用于生成不同类型的线程池实例。 常见的线程池实现包括: 1. newSingleThreadExecutor():创建一个单线程的线程池,保证任务按提交顺序串行执行。 2. ...

    java线程池threadpool简单使用源码

    要理解`java线程池threadpool简单使用源码`,你需要查看`src`目录下的Java文件,了解如何实例化`ThreadPoolExecutor`,设置相关参数,以及如何提交任务到线程池。同时,查看源码中对`ThreadGroup`的使用,理解它如何...

    Java线程池文档

    Java线程池是一种高效管理线程的机制,它允许开发者预先设定线程的数量,并通过池化的方式重用已创建的线程,以提高系统性能,减少线程的创建和销毁开销。线程池在Java中是通过`java.util.concurrent`包下的`...

    Java线程池的几种实现方法和区别介绍实例详解

    Java线程池是一种高效管理线程的技术,它可以帮助开发者更好地控制并发执行的任务,避免频繁创建和销毁线程带来的开销。在Java中,线程池的实现主要通过`java.util.concurrent`包中的`ExecutorService`接口及其具体...

    java 线程池实现多并发队列后进先出

    Java线程池是一种高效管理并发任务的机制,它允许开发者预先配置一定数量的线程,以便在处理多个并发任务时能有效地复用这些线程,从而避免了频繁创建和销毁线程带来的开销。在Java中,`java.util.concurrent`包下的...

    在spring boot中使用java线程池ExecutorService的讲解

    在上面的代码中,我们创建了一个线程池配置类,使用 @Bean 注解创建了一个线程池实例,该实例具有 5 个核心线程,10 个最大线程,闲置线程存活 60 秒,使用 ArrayBlockingQueue 作为任务队列。 总结 在 Spring ...

    JAVA使用线程池查询大批量数据

    1. **创建线程池**:首先,我们需要创建一个线程池实例。通常,我们可以根据实际需求设置线程池参数。例如,如果数据量大且系统资源充足,可以适当增加线程数量;反之,若系统资源有限,应控制线程数量,避免资源...

    基于Java线程池技术的数据爬虫设计与实现.pdf

    本文所提及的基于Java线程池技术的数据爬虫设计与实现,不仅涉及到了数据爬虫的原理和架构,还包括了多线程编程的知识点,以及线程池技术在数据爬虫中的具体应用。 首先,数据爬虫的基本原理是模拟用户的点击行为,...

    java 线程池

    ### Java线程池详解 #### 一、线程与线程池的概念 在Java中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程(例如某个Java应用)至少有一个线程,如果线程...

    spring 线程池实例

    在Java编程中,Spring框架提供了一种优雅的方式来管理和执行异步任务,这就是Spring的线程池。线程池是多线程编程中的一个重要概念,它能够有效地管理并发任务的执行,提高系统的性能和效率。本实例将深入探讨Spring...

    java线程池和反射机制例子

    Java线程池与反射机制是Java编程中两个重要的概念,它们在实际开发中扮演着至关重要的角色。线程池能够有效地管理和控制并发执行的任务,而反射机制则允许我们在运行时动态地访问和修改类的信息。 首先,让我们深入...

    JAVA线程池介绍以及简单实例

    JAVA线程池介绍以及简单实例,代码加文档 。原始资源连接 https://wenku.baidu.com/view/a3d09d0316fc700abb68fce9.html?from=search

Global site tag (gtag.js) - Google Analytics