2012-12-26 3 views
0
class Server 
{ 
    while(true) 
    new ClientThread(Socket.accept()).start(); 
} 
class ClientThread extends Thread 
{ 
    public void run() 
    { 
     ppl.chat(Socket s);//a defined protocol object in my program 
    } 
} 
class Protocol 
{ 
    public Protocol(Socket s) 
    { 
      socket=s; 
    } 
    public synchronized void chat() 
    { 
     //here i defined socket input output streams and serverinput is a string given  by server 
     if(ServerInput=="wait") 
     wait(); 
     if(ServerInput=="cont") 
     notify() 
     .....................sending infomation------- 
     } 
}  

여기에서 나는이 소켓을 통해 정보를 보낼 수없는 후 wait() 블록에서 벗어날 수 있습니다. 테스트가 성공적으로 대기 블록에서 나왔습니다. 다른 클라이언트 스레드에서 "계속"을 제공하여 알림을받을 때. 누구든지 내 문제를 해결합니까? 진심으로 감사드립니다.상황에 따라 클라이언트 스레드를 깨우는 방법?

답변

0

귀하의 의사 코드는 매우 혼란스러운 IMHO입니다.

쓰기 전용이 아닌 읽기 전용으로 클라이언트 스레드를 사용하십시오.

당신이 쓰고 싶은 경우, 쓰기 잠금 (전체 개체를 고정하지 않음) 또는

이 방법은 읽기 스레드 만 요구 (듭니까 같은 일을하는) 하나의 쓰기에 메시지를 보낼를 얻을 수 읽어야 할 것이있을 때 일어나기.

즉, 어떤 경우에도 사용하도록 제안하거나 기다릴 필요가 없음을 의미합니다. 필요한 경우 Java 5.0에 추가 된 High Level 동시성 라이브러리를 사용해야합니다 (이 경우 제외).

관련 문제