Java如何使用线程池实现socket编程
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要讲解了"Java如何使用线程池实现socket编程",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java如何使用线程池实现socket编程
千家信息网最后更新 2026年11月04日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安全错误
数据库的锁怎样保障安全
百单网互联网科技有限公司
上海卓越科技互联网
中国互联网科技股
互联网属科技
科技互联网技术
互联网科技集团
互联网金融科技创新
善班互联网科技有限公司
沃里互联网科技
米客互联网科技
重庆科技学院互联网
中国互联网金融科技基金
青海省互联网新科技
恒银科技与互联网金融
央行互联网金融科技公司
汽车互联网创新科技园
广州市恰铎互联网科技有限公司
南博望互联网科技有限公司
上海京穆互联网科技有限公司
互联网相关科技技术
科技互联网
广州万易互联网科技有限公司
科技和互联网公司
中国互联网科技发展
腾讯科技 互联网女皇
掌上梦互联网科技
国外互联网科技网站
互联网系的金融科技公司
梅州GM互联网络科技有限公司
知域互联网科技有限公司官网