单例和同步Servlet

时间:2011-11-30 16:04:37

标签: java servlets singleton

我想创建一个处理串口设备输入的Servlet,因此我想确保一次只有一个Servlet实例存在于容器中(无论容器是否只生成一个实例)确保它并且对串口的访问是同步的或序列化的。

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

您不需要servlet是单例,您只需要能够控制对串行端口的访问。事实上,即使您可以强制执行servlet类的单个实例,规范也允许多个用户同时访问servlet。

您可以改为编写一个处理端口访问的类,通过一次允许单个线程访问来封装控件。然后,您需要决定如何对servlet的并发请求进行操作(阻塞,返回某种“正在使用的串行端口”错误消息等)。

答案 1 :(得分:1)

建议:不要这样做。将servlet管理留给容器,并使用您自己的单例进行串口处理。

解决方案:你不能,因为你无法控制构造函数。但是,你能做什么(以及什么是非常糟糕的事情 - 不要告诉任何我说过的人)是在servlet中有一个静态字段,保留对第一个实例化实例的引用。这样,servlet的所有实例都能够将处理委托给第一个实例。

同样,将请求处理与串口处理分开只会让您和容器更加容易。