今天把多线程的发送搞定了一半.而且实现了服务器和客户端不在一个主机了

public class Sendert {
 QueueConnectionFactory  queueConnectionFactory = null;
  QueueConnection         queueConnection = null;
    QueueSession            queueSession = null;
    Queue                   queue = null;
   QueueSender             queueSender = null;
      final String            MSG_TEXT1 =
          new String("Here is a client-acknowledge message 4tetrtretertert4t45ewrwerwrgergrt4rqwerew5t479347597505890 34535&%^*&$&^$^%$&%&*)_*)&^*%*^$&$^(*&(*&(*%*%&^%*%^%*&^*&^&*^*&^*&^");
      final String            MSG_TEXT2 =
       new String("Here is a Message  327893475984 ryeirrfr9urtyureyt&&&&&&&)))__^&&&))gerg)%%^%^%^%&(*(*(*)*(**)(*)*)*)T^HJCJBDKJFBKJJDOAIWEU(Q&#(&E(*&#Q*E&QEUODIJEDLJLHDKGDUWTE&QE");
      TextMessage         message1 = null;
      TextMessage         message2 =null;

 public Sendert() throws JMSException, NamingException {

  javax.naming.Context ictx = new InitialContext(JMSConstant.getProp());

  queueConnectionFactory = (QueueConnectionFactory) ictx.lookup("qcf");

  queueConnection = queueConnectionFactory.createQueueConnection("user1",
    "user1");
  queueSession = queueConnection.createQueueSession(false,
    Session.CLIENT_ACKNOWLEDGE);
  queue = (Queue) ictx.lookup("queue");
  ictx.close();
  System.out.println("  SENDER: Created client-acknowledge session");
  queueSender = queueSession.createSender(queue);
  message1 = queueSession.createTextMessage();
  message2 = queueSession.createTextMessage();
  message1.setIntProperty("sessionID", 1);
  message2.setIntProperty("sessionID", 2);
 }
 
   class AsynSender implements Runnable
  {
   public void run ()
   {   
    
       try {
            
             for(int i=0;i<10;i++){
              message1.setText("i"+MSG_TEXT1);
              message2.setText("i"+MSG_TEXT2);
             System.out.println("  SENDER: Sending message: "
                 + message1.getText()+i);
             queueSender.send(message1);
             queueSender.send(message2);
             }
         } catch (JMSException e) {
             System.out.println("Exception occurred: " + e.toString());
           
         }
//         finally {
//          if(queueSender!=null){
//           try{queueSender.close();
//           
//          }catch(JMSException e){}
//          if(queueSession!=null)
//           {
//           try{
//           queueSession.commit();
//           }catch(JMSException e){}
//          }
//             if (queueConnection != null)
//             {
//                 try {
//                     queueConnection.close();
//                 } catch (JMSException e) {}
//             }
//         }
//         }
         }
  }
  
 public void run_threads() {
  AsynSender tt = new AsynSender();
  for (int i = 0; i < 5; i++)
   {   new Thread(tt).start();
   
   
   
   System.out.println("go");}
//  try{
//   tt.join();
//   
//  }catch(InterruptedException je){}
  System.out.println("go2");
  }
  
     
 
 void close() throws JMSException {
  queueSender.close();
  queueSession.close();
   queueConnection.close();
 }


    public static void main(String[] args) throws JMSException, NamingException {
     int count=0;
  Sendert se = new Sendert();
  se.run_threads();
  Thread tt=Thread.currentThread();
  System.out.println("count==: "+tt.activeCount());
//  tt.g
//  System.out.println("tt==: "+tt);
//  myLable:{
//   count=tt.activeCount();
//  }
//  for(;;){
//    break myLable;
//  }
//  while(true){
//   
//  
//  if(tt.activeCount()==3) 
//        se.close();
//  else break myLable;;}
//  se.close();
  System.out.println("count==: "+tt.activeCount());
 }

}
 

说明.就是一个内部类,更好的封装了一个可以实现多线程的run方法..不过多线程有个问题..我无法知道子线程什么时候完毕,然后调用close()方法关闭所以对象...搞了几个小时,判断活动的线程,join().好象都不行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值