Java如何使用线程池实现socket编程
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要讲解了"Java如何使用线程池实现socket编程",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java如何使用线程池实现socket编程
千家信息网最后更新 2025年11月14日Java如何使用线程池实现socket编程
这篇文章主要讲解了"Java如何使用线程池实现socket编程",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java如何使用线程池实现socket编程"吧!
前言
以多个客户端和一个服务端的socket通信为例,服务端启动时创建一个固定大小的线程池。服务端每接收到一个连接请求后(通信任务),交给线程池执行,任务类实现了Runnable接口,用于跟客户端进行读写操作,该类的对象作为任务通过execute(Runnable task)提交给线程池。
一、一个简单的C/S模型实现
1.服务器:
import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class Server { public static void main(String[] args) throws Exception { System.out.println("server start"); ServerSocket server = new ServerSocket(1003); while (true) { Socket client = server.accept(); InputStream input = client.getInputStream(); byte[] b = new byte[8196]; int len = input.read(b); System.out.println(new String(b, 0, len)); if(new String(b).equals("close")) break; client.close(); } server.close(); }}2.客户端:
import java.io.OutputStream;import java.net.Socket;import java.util.Scanner;public class Client { public static void main(String[] args) throws Exception { System.out.println("client start"); Scanner scanner =new Scanner(System.in); Socket client =new Socket("localhost",1003); OutputStream out = client.getOutputStream(); while (true) { String str = scanner.nextLine(); out.write(str.getBytes()); } }}此处只能服务器接收客户端信息。
二、线程池使用方法
1.新建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(3);
创建一个线程池,该线程池重用在共享无界队列上运行的固定数量的线程。 在任何时候,最多3个线程将是活动的处理任务。如果在所有线程都处于活动状态时提交了其他任务,它们将在队列中等待,直到有线程可用。 如果任何线程在关闭之前的执行过程中由于失败而终止,如果需要执行后续任务,新的线程将取代它。 池中的线程将一直存在,直到显式关闭。
2.用Runnable接口实现线程
private static class InnerThread implements Runnable{public void run();}3.创建线程对象并提交至线程池执行
InnerThread innerThread = new InnerThread();pool.execute(innerThread);
三、结合起来
当新的连接建立时创建一个新线程并提交到线程池
while(true){ Socket clientSocket = server.accept(); InnerThread innerThread = new InnerThread(clientSocket); pool.execute(innerThread); }run方法为如何处理新连接,以及客户端和服务端的信息交流。
四、使用新的输入输出流
由于OutputStream和InputStream类有方法没有实现或是实现的不是很好,所以我们选择使用
BufferedReader,PrintWriter类来实现通信。
服务器:
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter pw = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));while(true){ String buf = br.readLine(); System.out.println(Thread.currentThread().getName()+" client: " + buf); if(buf.equals("close")){ break; } pw.println("response:"+buf); pw.flush(); } System.out.println("close client"); br.close(); pw.close(); clientSocket.close();客户端:
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter pw = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream())); while(true){ System.out.print("client: "); String buf = sc.nextLine(); pw.println(buf); pw.flush(); if(buf.equals("close")){ break; } buf= br.readLine(); System.out.println("server: " + buf); if(buf.equals("close")){ break; } } br.close(); pw.close(); sc.close(); clientSocket.close();这样子就能较为方便的实现服务端向客户端发送信息。
感谢各位的阅读,以上就是"Java如何使用线程池实现socket编程"的内容了,经过本文的学习后,相信大家对Java如何使用线程池实现socket编程这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
线程
服务
客户
客户端
任务
编程
信息
服务器
学习
通信
内容
对象
接口
方法
端的
队列
活动
使用方法
前言
多个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
宁德新能源软件开发工程师
中专的网络技术专业教师
应用软件开发项目案例
广东正规软件开发哪家便宜
服务器安装机
杨浦区数据软件开发服务价格
软件开发企业估值报告案例
外网能连内网的数据库
电脑服务器主机生产
怎么可制作软件开发
如何进入服务器管理页面
硬件测试开发软件开发
十大网络安全神器
远程大屏播放网络安全建议
为什么末日生存连接不了服务器
win7 ftp服务器开启
网络技术和软件与应用哪个好
乾航网络技术有限公司
连凯软件开发
中关村互联网前沿科技
怎么创建共享服务器
边界网络安全 路线图
mysql数据库 回表
手机软件开发容易
鱼池 服务器在哪
海南省计算机网络技术哪个学校好
聚甲基丙烯酸物竞数据库
网络安全教育课心得体会400字
华为网络技术电子版百度云
宿迁网络安全