java serversocket 线程池,java线程池实现代码

  java serversocket 线程池,java线程池实现代码

  

目录

前言一、一个简单的周/秒模型实现1.服务器:2.客户端:二、线程池使用方法1.新建一个线程池2.用可追捕的接口实现线程3.创建线程对象并提交至线程池执行三、结合起来四、使用新的输入输出流总结

 

  

前言

以多个客户端和一个服务端的窝通信为例,服务端启动时创建一个固定大小的线程池。服务端每接收到一个连接请求后(通信任务),交给线程池执行,任务类实现了可追捕的接口,用于跟客户端进行读写操作,该类的对象作为任务通过执行(可运行的任务)提交给线程池。

 

  

一、一个简单的C/S模型实现

 

  

1.服务器:

导入Java。io。inputstream导入Java。网。服务器套接字;导入Java。网。插座;公共类服务器{公共静态void main(String[]args)引发异常{系统。出去。println(服务器启动);服务器套接字server=新服务器套接字(1003);while(true){ Socket client=server。接受();InputStream输入=客户端。getinputstream();字节[] b=新字节[8196];int len=输入。改为(b);System.out.println(new String(b,0,len));如果(新字符串(乙)百分之五十.等号(关闭))断开;客户。close();}服务器。close();}}

 

  

2.客户端:

导入Java。io。输出流;导入Java。网。插座;导入Java。util。扫描仪;公共类客户端{ public static void main(String[]args)引发异常{系统。出去。println(客户端启动);扫描仪扫描仪=新扫描仪(系统。在);套接字客户端=新套接字(‘本地主机’,1003);输出流out=客户端。获取输出流();while(true){ String str=scanner。next line();出去。写(字符串。getbytes());} }}此处只能服务器接收客户端信息。

 

  

二、线程池使用方法

 

  

1.新建一个线程池

执行者服务池=执行者。newfixedthreadpool(3);创建一个线程池,该线程池重用在共享无界队列上运行的固定数量的线程。在任何时候,最多3个线程将是活动的处理任务。如果在所有线程都处于活动状态时提交了其他任务,它们将在队列中等待,直到有线程可用。如果任何线程在关闭之前的执行过程中由于失败而终止,如果需要执行后续任务,新的线程将取代它。池中的线程将一直存在,直到显式关闭。

 

  

2.用Runnable接口实现线程

私有静态类内螺纹实现runnable { public void run();}

 

  

3.创建线程对象并提交至线程池执行

InnerThread InnerThread=new InnerThread();游泳池。execute(innerThread);

 

  

三、结合起来

当新的连接建立时创建一个新线程并提交到线程池

 

  while(true){ Socket client Socket=server。接受();InnerThread InnerThread=新的InnerThread(客户端套接字);游泳池。execute(innerThread);}运行方法为如何处理新连接,以及客户端和服务端的信息交流。

  

四、使用新的输入输出流

由于输出流和输入流类有方法没有实现或是实现的不是很好,所以我们选择使用印刷工人类来实现通信。

 

  服务器:

  缓冲读取器br=新缓冲读取器(新输入流读取器(客户端套接字。getinputstream()));PrintWriter pw=new PrintWriter(新输出streamwriter(客户端套接字。获取输出流()));while(true){ String buf=br。readline();系统。出去。println(线程。当前线程().getName() client : buf);如果(buf。equals( close ){ break;} pw。println( response : buf);pw。flush();} System.out.println(关闭客户端);br。close();pw。close();客户端套接字。close();客户端:

  缓冲读取器br=新缓冲读取器(新输入流读取器(客户端套接字。getinputstream()));PrintWriter pw=new PrintWriter(新输出streamwriter(客户端套接字。获取输出流()));while(true){ system。出去。打印(客户端: );字符串buf=sc。next line();pw。println(buf);pw。flush();如果(buf。equals( close ){ break;} buf=br。readline();系统。出去。println( server : buf);如果(buf。equals( close ){ break;} } br。close();pw。close();即close();客户端套接字。close();这样子就能较为方便的实现服务端向客户端发送信息。

  

总结

以上就是今天要讲的内容,本文实现了使用线程池实现窝编程。

 

  本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注盛行信息技术的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: