Java ServletContextAttributeListener中的阻塞队列

Java ServletContextAttributeListener中的阻塞队列,java,servlets,blockingqueue,Java,Servlets,Blockingqueue,我正在尝试将数据(从ServletContextListener中启动的线程,该线程正在不断地向队列添加数据)传输到ServletContextAttributeListener 队列中的数据需要传递给连接的客户端,这些客户端在“AttributeReplace”上得到通知 数据包含在BlockingQueue中 然而我有点困惑;如果我通过调用 private BlockingQueue<String> queue = new LinkedBlockingQueue<Strin

我正在尝试将数据(从ServletContextListener中启动的线程,该线程正在不断地向队列添加数据)传输到ServletContextAttributeListener

队列中的数据需要传递给连接的客户端,这些客户端在“AttributeReplace”上得到通知

数据包含在BlockingQueue中

然而我有点困惑;如果我通过调用

private BlockingQueue<String> queue = new LinkedBlockingQueue<String>();
//..
event.getServletContext().setAttribute("serialPortData", queue);
//..
private BlockingQueue=new LinkedBlockingQueue();
//..
event.getServletContext().setAttribute(“serialPortData”,队列);
//..
问题:上下文是否包含此队列的副本或指针

因为如果它只复制队列,那么将队列添加到上下文中就没有意义了,对吗?或者你会用另一种方式解决这个问题


Thomas。

您是否检查过队列中的数据是否需要序列化才能传输到上下文中?如果您是指java.io.Serializable,那么数据不会实现。数据只是从串行端口读取的解码帧,其中包含来自不同传感器(GPS、陀螺仪、高度、速度)的信息,这些信息需要定期发送到客户端。
上下文
只是一个
地图
——它包含指针。我会将您的
队列
包装在某种类型的
对象
中,以使代码更清晰。然后我只需要将队列添加到上下文中一次。context.getServletContext().setAttribute(“serialPortData”,队列);然后简单地使用queue.add添加数据也会更改上下文中的队列。attributeAdded将在事件侦听器中调用,我在其中读取队列,如果为空则阻塞。对吗?@bmorris591 Thx对我帮助很大。