我正在使用 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+"] ";