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()このソケットを介して情報を送信できなくなった後、ブロックから離れることができます。待機ブロックから正常に出てくることをテストしました。他のクライアントスレッドから「cont」を与えて通知された場合。誰かが私の問題を解決しますか? よろしくお願いします。

4

1 に答える 1

0

あなたの疑似コードは非常に紛らわしい私見ですが、私がすることは.

書き込みではなく、読み取りにのみクライアント スレッドを使用します。

書き込みたいときは、書き込みロックを取得するか (オブジェクト全体をロックしないでください)、メッセージを 1 回の書き込みで送信します (ほとんど同じことを行います)。

このようにして、読み取りスレッドは、読み取るものがある場合にのみウェイクアップする必要があります。

これは、どのような場合でも使用することをお勧めする待機または通知が必要ないことを意味します。それらが必要な場合は、Java 5.0 で追加された高レベルの同時実行ライブラリを使用する必要があります (ただし、この場合は使用しません)。

于 2012-12-26T13:31:01.237 に答える