jdk1.4 构建 java多线程,并发设计框架 使用列子(四)

 使用jvm反射,通过类名取得一个处理数据客户端的实例。
  1. import java.io.ByteArrayOutputStream;
  2. import java.lang.reflect.InvocationTargetException;
  3. //import java.nio.ByteBuffer;
  4. /**
  5.  * 处理接收的流数据,把获取的相关数据流内容,发送给客户程序处理。
  6.  * @author guishuanglin 2008-11-3
  7.  * 
  8.  */
  9. public class ProcessRequestData implements Runnable {
  10.     //ByteArrayOutputStream
  11.     private ConcurrentQueue dataQueue;
  12.     private Class clientClass;
  13.     private IProcessClientData clientObejct = null;
  14.     private int requestCount;
  15.     private String netAddress;
  16.     /**
  17.      * @param ss
  18.      * @param requestNum
  19.      */
  20.     public ProcessRequestData(int requestCount,String netAddress,Class clientClass,ConcurrentQueue dataQueue) {
  21.         this.clientClass = clientClass;
  22.         this.dataQueue   = dataQueue;
  23.         this.requestCount= requestCount;
  24.         this.netAddress  = netAddress;
  25.         clientObejct = this.CreateClientObject();
  26.     }
  27.     public void run() {
  28.         try {
  29.             // 把当前处理流数据的线程,压入线程并发队列,在线程队列中等待处理.
  30.             if(clientObejct!=null ){
  31.                 clientObejct.ProcessStreamData(dataQueue,requestCount,netAddress);
  32.                 clientObejct.run();
  33.             }else{
  34.                 System.out.println("Request["+requestCount+"],创建客户端数据流处理对象实例失败,系统将丢失当前的数据流.");
  35.             }
  36.         } finally{
  37.             ReleaseResource();
  38.         }
  39.     }
  40.     public void ReleaseResource() {
  41.             if (dataQueue != null)
  42.                 dataQueue.clear();
  43.             dataQueue = null;
  44.             clientObejct = null;
  45.             clientClass = null;
  46.     }
  47.     /**
  48.      * 根据类名获取Class对象 Class c=Class.forName("java.lang.Integer"); 
  49.      * 参数类型数组 
  50.      * Class[] parameterTypes={String.class}; 
  51.      * 根据参数类型获取相应的构造函数
  52.      * java.lang.reflect.Constructor
  53.      * constructor=c.getConstructor(parameterTypes); 
  54.      * 参数数组 
  55.      * Object[] parameters={"1"};
  56.      * 根据获取的构造函数和参数,创建实例 Object
  57.      * o=constructor.newInstance(parameters);
  58.      */
  59.     
  60.     private IProcessClientData CreateClientObject() {
  61.         Class[] parameterTypes=new Class[]{};
  62.         java.lang.reflect.Constructor constructor;
  63.         Object[] parameters=new Object[]{};
  64.         //ByteArrayOutputStream
  65.         IProcessClientData o=null;
  66.         try {
  67.             constructor = clientClass.getConstructor(parameterTypes);
  68.             o = (IProcessClientData)constructor.newInstance(parameters);
  69.         }catch (SecurityException e) {
  70.             e.printStackTrace();
  71.         } catch (NoSuchMethodException e) {
  72.             e.printStackTrace();
  73.         } catch (IllegalArgumentException e1) {
  74.             e1.printStackTrace();
  75.         } catch (InstantiationException e1) {
  76.             e1.printStackTrace();
  77.         } catch (IllegalAccessException e1) {
  78.             e1.printStackTrace();
  79.         } catch (InvocationTargetException e1) {
  80.             e1.printStackTrace();
  81.         }
  82.         return o;
  83.     }
  84. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值