`
dev_liu
  • 浏览: 111672 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

消息接收的多线程实现

    博客分类:
  • JMS
阅读更多

package duoxianchengtest;

import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
 *
 * @author Owner
 *
 *
 */

public class Receiver1
{

   QueueReceiver qrec1=null;
   QueueSession qs =null;
   QueueConnection qc=null;
   /**
    *
    * @throws NamingException
    * @throws JMSException
    * 构造函数初始化
    */
public Receiver1() throws NamingException, JMSException{
//  ictx = new InitialContext(JMSConstant.getProp());
  Properties pr =new Properties();
  pr.put("82.0.176.214","16400");
  Context ictx = new InitialContext(pr);
     Queue queue = (Queue) ictx.lookup("queue");
     QueueConnectionFactory qcf = (QueueConnectionFactory) ictx.lookup("qcf");
     ictx.close();
     qc = qcf.createQueueConnection("user1","user1");
     qs = qc.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
     qrec1 = qs.createReceiver(queue,"sessionID=2");
}
/**
 *
 * @author Owner
 *  一个内部类继承Thread实现run()方法,在run()方法设置消息监听器.
 */
  class Brun extends Thread{
  public void run(){
   try{
    qrec1.setMessageListener(new MsgListener1());
    qc.start();
       }catch(JMSException e){}
         }
       }
  /**
   * 创建线程组
   *
   */
  public void run_thread() {
  Brun[] tt = new Brun[3000];
  for (int i = 0; i < tt.length; i++) {
   tt[i] = new Brun();
   tt[i].start();

   // System.out.println("go");
  }

  // for (int i = 0; i < tt.length; i++) {
  // System.out.println("go1");
  // try {
  // tt[i].join();
  //
  // } catch (InterruptedException je) {}
  //   
  //   
  // System.out.println("go2");
  //  }
 }
     
 
 void close() throws JMSException {
   qrec1.close();
  qs.close();
  qc.close();
 }
 /**
  *
  * @param args
  * @throws Exception
  */
  public static void main(String[] args) throws Exception
  {
//  long time1= System.currentTimeMillis();
   
    System.out.println("Requests to receive messages...");

      Receiver1 rc=new Receiver1();
      rc.run_thread();
      System.in .read();
      rc.close();
      System.out.println();
      System.out.println( " messages received.");
//    long time2 = System.currentTimeMillis();
//    System.out.println("time=:"+(time2-time1));
   
  }
}

本来也想做个join()的.但是只是设置消息监听器完毕.不行呀..看来要关闭连接对象,需要被动的接收消息,,然后根据消息内容来处理了关闭了?还有一个问题是.线程是否稳定.在ejb里消息驱动bean是不支持多线程发送的.一切都还需要测试.

分享到:
评论
3 楼 dev_liu 2007-01-05  
我发现自己太喜欢多线程了..什么时候都在用,这个接收的客户端就嵌套了2个多线程.一个设置消息监听器,一个是对消息的getText()的动作.
2 楼 dev_liu 2007-01-05  
package duoxianchengtest;

import java.util.Date;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;





public class Test extends Thread{
TextMessage msg ;

public Test(TextMessage  msg){
this.msg= msg;

}
public void run() {
Date date = new Date();

    System.out.println("time1:" + date.getTime());
try { 
System.out.println("test"+msg.getText() );
} catch (JMSException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
    


}
}
1 楼 dev_liu 2007-01-05  
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.TextMessage;





public class MsgListener1 implements MessageListener
{

      TextMessage kmsg =null;

  public void onMessage(Message msg) {

  if (msg instanceof TextMessage)
    kmsg=(TextMessage)msg;
    new Test(kmsg).start();
}

}
   

相关推荐

    C# UDP多线程发送接收

    本教程将重点讲解如何利用C#实现多线程的UDP发送与接收。 一、UDP基础知识 1. UDP协议特点:无连接、不可靠、无拥塞控制,传输速度快。 2. UDP报文结构:包括源端口号、目标端口号、长度和校验和字段。 3. 使用C#的...

    c#编写串口通讯代码 多线程实现.rar_c# 串口多线程_c#编写串口通讯代码多线程实现_young5op_串口_串口通讯

    c#编写串口通讯代码多线程实现,逻辑与界面分离。发送与接收都为单独线程

    C#多线程消息处理例子

    通过分析和运行这个项目,开发者可以更直观地了解如何在C#中实现多线程消息处理,以及如何在后台线程和UI线程之间进行有效通信。 总结来说,这个C#多线程消息处理例子展示了如何在后台线程中执行任务并安全地将结果...

    c#编写串口通讯代码 多线程实现.rar_C#串口_c# 串口多线程_c#多线程_串口多线程_串口通信

    串口通信的实现,编程环境为C#,实现技术采用了多线程方式

    多线程进度条(真正的多线程实现)

    在这个场景中,我们讨论的是一个实现了“真正的多线程进度条”的案例,它利用了进程间通信(IPC)来实现数据处理和界面更新的分离。 首先,我们要理解多线程的基本概念。在Windows环境下,MFC(Microsoft ...

    多线程实现消息收发的Demo

    这个"多线程实现消息收发的Demo"显然旨在展示如何利用这两个技术来实现高效的消息传递。以下是对这两个核心知识点的详细解释。 首先,多线程(Multithreading)是一种并发执行任务的方法,它允许程序同时执行多个...

    基于UDP协议的多线程高速接收QT工程

    【标题】"基于UDP协议的多线程高速接收QT工程"揭示了这个项目的核心技术是使用UDP协议进行高速数据接收,并结合多线程技术来处理海量数据,且它是在QT框架下实现的。QT是一个流行的跨平台应用程序开发框架,特别适合...

    实时接收发送消息(接收消息线程阻塞,发送消息线程唤醒)

    在标题和描述中提到的“实时接收发送消息(接收消息线程阻塞,发送消息线程唤醒)”是一个典型的并发编程问题,涉及到线程管理和通信。以下是对这个主题的详细讲解: 1. **线程与并发**: - 线程是程序执行的最小...

    python多线程实现TCP服务端

    本文实例为大家分享了python多线程实现TCP服务端的具体代码,供大家参考,具体内容如下 需求 1.创建一个TCP服务器接收服务端发送的信息并给予答复 2.以多线程方式实现接收客户端信息 3.间客户端发送的信息解码...

    qt下串口接收数据线程实现

    在Qt框架下,实现串口接收数据的线程化处理是一项关键任务,特别是在处理高速串口数据流时。Qt提供了一套完整的QSerialPort模块,用于串口通信,而使用线程可以确保串口接收不影响主线程的性能,提供更流畅的用户...

    多线程UDP接收数据并存储

    在实现多线程UDP接收数据的过程中,通常会创建一个主循环线程负责监听和接收UDP数据包,然后将接收到的数据包分发到其他工作线程进行处理。工作线程可以负责解码数据、校验数据的完整性和顺序,以及将数据存储到合适...

    多线程实现的秒表

    总结来说,使用MFC实现多线程秒表涉及到线程创建、计时器实现、线程同步、消息传递、UI更新以及异常和资源管理等多个关键步骤。这个实例不仅展示了C++多线程的运用,也揭示了MFC在Windows编程中的优势。通过实践这个...

    多线程实现的模拟QQ程序

    《多线程实现的模拟QQ程序详解》 在计算机编程领域,多线程技术是一种重要的并发执行机制,它允许多个任务在同一时刻运行,极大地提高了程序的效率和响应性。本篇文章将深入探讨如何利用多线程技术实现一个模拟QQ...

    Linux下基于socket多线程并发通信的实现

    在实际的多线程并发通信实现中,服务器端需要维护一个线程池,当有新的连接请求时,从线程池中获取一个空闲线程处理请求,处理完成后线程返回线程池。这种方式提高了系统的并发性能,同时也保证了资源的有效利用。 ...

    用多线程实现串口读写数据以及文件的读写

    本教程聚焦于如何利用多线程实现串口(Serial Port)读写数据及文件的读写操作,这对于理解和开发高效通信系统至关重要。 首先,我们要理解什么是串口通信。串口通信是一种基于串行数据传输的通信方式,它通过一条...

    多线程接收文件例子

    在实现多线程接收文件时,我们需要考虑以下几个关键知识点: 1. **线程创建**:通常使用语言提供的API来创建新线程,如Java中的`Thread`类,Python的`threading`模块等。每个线程应有一个独立的任务,即接收一个...

    msmq消息队列多线程

    本主题聚焦于使用C#进行多线程操作MSMQ消息队列,以及如何对消息队列的入队和出队操作进行抽象基类设计,并检查消息队列是否包含消息。 首先,我们需要理解C#中的多线程。在.NET框架中,`System.Threading`命名空间...

    SOCKET多线程接收文件

    在本场景中,我们讨论的是一个"SOCKET多线程接收文件"的系统设计,它允许多个客户机同时向服务器发送文件。尽管系统存在一些已知的BUG,但能够保证接收到的文件完整无缺,这表明它在并发处理和数据完整性方面具有...

    多线程实现基于TCP的Socket通信.rar

    本项目“多线程实现基于TCP的Socket通信”聚焦于在Windows环境下,如何利用C++编程语言通过多线程技术来实现高效、稳定的网络连接。下面将详细阐述涉及的知识点。 1. **TCP协议**:TCP是一种面向连接的、可靠的、...

Global site tag (gtag.js) - Google Analytics