【发布时间】:2016-09-20 08:46:23
【问题描述】:
我正在使用 Java 实现后端服务。我选择应用Singleton 模式是因为应该只运行一项服务。但是,该服务也是一个 Socket.IO 客户端,因此在服务器推送时必须触发某种事件。但该事件应该是队列中的synchronized。
我认为我的实现不正确。 Tt 似乎synchronized(this) 块不是保护Backend 对象,而是保护Emitter.Listener 对象。
private static synchronized BackendServer getInstance()
{
if(instance == null) {
instance = new BackendServer();
try {
socket = IO.socket(host_name+":"+port_frontend);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
}
}).on("event1", new Emitter.Listener() {
@Override
public void call(Object... args) {
try {
synchronized(this) { <--Which object is synchronized?
String timestamp = getCurrentTime();
String logging = "["+timestamp+"] ";
【问题讨论】:
-
不应该用
BackendServer的实例方法创建socket吗?如果它是服务器,那么从样式上讲,您不应该单独创建套接字。
标签: java singleton synchronized synchronized-block