`
kayo
  • 浏览: 548279 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

对client生成的线程池进行管理

阅读更多
对client生成的线程池进行管理 打印
import  java.io.IOException;
import  java.net.ServerSocket;
import  java.net.Socket;

public class  PoolServerBase  extends  Thread  {
   protected  Socket socket;

   static  PoolServerBase head =  null ;

   protected  PoolServerBase next =  null ;

   static protected  boolean  init ( Class  clobj,  int  threads ) {
     try  {
       for  ( int  i =  0 ; i < threads; i++ ) {
         PoolServerBase thread =  ( PoolServerBase clobj.newInstance () ;
         thread.next = head;
         head = thread;
         thread.start () ;
       }
     catch  ( Exception e ) {
       return false ;
     }
     return true ;
   }

   static synchronized protected  void  addToList ( PoolServerBase me ) {
     me.next = head;
     head = me;
   }

   synchronized protected  void  waitForSignal () {
     try  {
       wait () ;
     catch  ( InterruptedException e ) {
     }
   }

   public  void  run () {
     while  ( true ) {
       waitForSignal () ;
       doClientProcessing () ;
       addToList ( this ) ;
     }
   }

   synchronized protected  void  handleClient ( Socket s ) {
     socket = s;
     notify () ;
   }

   protected  void  doClientProcessing () {
     try  {
       String s =  "Server." ;
       s +=  "Thread: "  this .toString () ;
       socket.getOutputStream () .write ( s.getBytes ()) ;
       sleep ( 10000 ) // simulate processing
       s =  "Complete" ;
       socket.getOutputStream () .write ( s.getBytes ()) ;
       socket.close () ;
     catch  ( Exception e ) {
       System.out.println ( e ) ;
     }
   }

   static synchronized protected  boolean  listEmpty () {
     return  head ==  null ;
   }

   static protected  void  assignThread ( Socket sock ) {
     PoolServerBase t = head;
     head = head.next;
     t.socket = sock;
     synchronized  ( t ) {
       t.notify () ;
     }
   }

   static public  void  startServer ( int  port ) {
     ServerSocket ssock;
     Socket sock;
     try  {
       ssock =  new  ServerSocket ( port ) ;
       while  ( true ) {
         Socket esock =  null ;
         try  {
           esock = ssock.accept () ;
           while  ( listEmpty ())
             yield () ;
           assignThread ( esock ) ;
         catch  ( Exception e ) {
           try  {
             esock.close () ;
           catch  ( Exception ec ) {
           }
         }
       }
     catch  ( IOException e ) {
     }
   }

   static public  void  main ( String args []) {
     init ( PoolServerBase.class,  3 ) ;
     System.out.println ( "Starting server on port 808" ) ;
     startServer ( 808 ) ;
   }
}
       
分享到:
评论

相关推荐

    异步并行加载工具Asyncload.zip

    针对方法调用,基于字节码增强技术,运行时生成代理类,快速返回mock对象,后台异步进行调用通过管理和调度线程池,将后台异步调用进行加速处理,达到一个平衡点业务执行过程需要获取mock对象的真实数据时,阻塞等待...

    微信扫一扫登录、微信支付、springsecurity&oauth2

    项目中使用到的技术包含SpringBoot、SpringSecurity&oauth2(安全资源和授权中心模式、包括登录接口自定义返回字段、自定义手机号+密码登录、自定义免密登录)、Queue队列、线程池、xss攻击配置、SpringCache、Mybatis...

    yechuandanmu-client:一个与ethanluoyc的Yechuan Danmaku Presentation System结合使用的danmaku客户程序,该系统在iPhone上用Pythonista编写

    您可以调整发布间隔以及自定义模板danmaku池以进行顺序/随机生成。 没有我的最后一刻帮助,这个项目可能无法实现。 :D 该应用程序在单线程模式下的Python上运行,并在multuthread中运行Pythonista(一种iOS实现...

    jrpc:C ++ 17中的JSON-RPC实现

    service/client stub由程序自动生成, 用户只要include相应的stub就可以接收/发起RPC. 使用 每个spec.json文件都对应了一个RpcService. 下面的spec定义了名为Arithmetic的RpcService, 加法和减法两个method. { ...

    vc++ 开发实例源码包

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    Drogon跨平台框架-其他

    18、基于线程池实现sqlite3数据库的异步读写,提供与上文数据库相同的接口; 19、支持ARM架构; 20、方便的轻量级ORM实现,支持常规的对象到数据库的双向映射操作; 21、支持插件,可通过配置文件在加载期动态拆装;...

    vc++ 应用源码包_1

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    java jdk实列宝典 光盘源代码

    12反射 是java程序开发的特征之一,允许java程序对自身进行检查,并能直接操作程序的内部属性; instanceof操作符,instanceof.java; 获取类的信息,ViewClassInfoJrame.java; 动态调用类的方法,CallMetod.java; ...

    vc++ 应用源码包_2

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    vc++ 应用源码包_3

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    vc++ 应用源码包_6

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    vc++ 应用源码包_5

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    minirpc:RPC,C,便携式,小型,嵌入式系统

    易于使用,设置服务器,用户只需要知道 4-5 个 API 就可以拥有一个具有多个后端线程池架构的 IO 线程; 对于客户端用户,只需要 1 个 API。 高效,有线协议完全基于二进制,整数使用 Base128 编码,字符串编码为...

    JAVA核心知识点整理(有效)

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................

Global site tag (gtag.js) - Google Analytics