java - 从线程中读取数据(在 Servlet 中)

标签 java concurrency

我正在使用 ServletContextListener 创建一个新线程。

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.concurrent.*;

    public class Port implements ServletContextListener {
        private ExecutorService executor;

        public void contextDestroyed(ServletContextEvent event) {
            executor.shutdown();

        }

        public void contextInitialized(ServletContextEvent event) { 
            // start task
            executor = Executors.newSingleThreadExecutor();
            executor.submit(new Task()); //task should implement Runnable!

        }
    }

在此线程中,我正在从串行端口 (SerialPortEventListener) 读取数据。 task.class 应在服务器处于 Activity 状态的整个期间从串口读取信息。我把它放在一个线程中,因为只能有一个实例从串行端口读取;然后应将数据共享给所有客户端。

现在我想访问这个线程从串行端口读取的数据。

这能做到吗?如果是,那么如何?

最佳答案

例如,您可以将读取的数据存储在 servlet 上下文属性中。然后,从其他类中,您将从 servlet 上下文中获取属性:

public void contextInitialized(final ServletContextEvent event) { 
        // start task
        executor = Executors.newSingleThreadExecutor();
        executor.submit(new Runnable() {
            @Override
            public void run() {
                String data = readFromPort();
                event.getServletContext().setAttribute("serialPortData", data); 
            }
        });
    }
}

关于java - 从线程中读取数据(在 Servlet 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15177456/

相关文章:

java - 无法使用 appium 在模拟器中启动 Android 应用程序

Java volatile 和副作用

java - 在java中同步一个对象,然后更改同步变量的值

Java UDP 数据包大小对齐

java - 实现抽象类的优雅方式

java - 如何解压缩 zip 文件的特定目录中的所有文件?

c++ - 我可以使用 cmpxchg16b 以原子方式将指针复制到指针和 int,同时递增 int(原子引用计数)吗?

java - com.sun.imageio.plugins.jpeg.JPEGImageReader 不再是 JDK-11 的一部分

malloc 失败会导致死锁或竞争条件吗?

cocoa - 调试 NSOperationQueue 阻塞