我正在使用Java實現後端服務。我選擇應用Singleton
模式,因爲應該只有一個服務正在運行。然而,這個服務也是一個Socket.IO客戶端,因此當服務器推送時必須有某種事件被觸發。但是該事件應該是隊列中的。設計模式:如何在Java中以單例模式創建同步方法或塊?
我認爲我的實施不正確。 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'的實例方法創建套接字嗎?如果它是服務器,那麼風格明智的是你不應該單獨創建套接字。 – RealSkeptic