Socket通讯解决并发采用线程池

这篇博客分享了一个使用Java线程池处理Socket并发通讯的作业解决方案,包括服务器端ThreadServer和客户端EchoClient的代码实现。
摘要由CSDN通过智能技术生成

学生我作业交完了,代码分享一下!不多说什么了哈

服务器端ThreadServer

ThreadPool.java

package thread;
import java.util.LinkedList;

public class ThreadPool extends ThreadGroup{
	private boolean isClosed=false;//线程池是否关闭
	private LinkedList<Runnable> workQueue;//表示工作队列
	private static int threadPoolID;//表示线程池ID
	private int threadID;//表示工作线程ID
	
	public ThreadPool(int poolSize){//poolSize指定线程池中的工作线程数
		super("ThreadPool-"+(threadPoolID++));
		setDaemon(true);
		workQueue=new LinkedList<Runnable>();//创建并启动工作线程
		for(int i=0;i<poolSize;i++){
			new WorkThread().start();
			
		}	
		
	}
	/**
	 *向工作队列中加入一个新任务,由工作线程去执行
	 * @param task
	 */
	public synchronized void execute(Runnable task){
		if(isClosed){//线程池被关闭则抛出
			throw new  IllegalStateException();
		}
		if(task!=null){
			workQueue.add(task);
			notify();//唤醒正在getTask()方法中等待任务的工作线程
		}
		
	}
	
	/**
	 * 从工作队列中取出一个任务,工作线程会调用此方法
	 * @return
	 * @throws InterruptedException
	 */
	
	protected synchronized Runnable getTask()throws InterruptedException{
		while (workQueue.size()==0) {
			if(isClosed)return null;
			wait();//如果工作队列中没有任务,就等待任务
			
		}
		return workQueue.removeFirst();
		
	}

	/*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值