1

複数のデータグラム ソケットを管理するサーバーを作成する必要があります。さまざまなソケットの非同期管理を可能にする java.nio のセレクターについては知っていますが、メッセージを解析した後、別のスレッドにイベントを発生させる必要があります (オプションでいくつかのパラメーターを使用)。ソケットを管理するスレッドに他のスレッドを「登録」させ、データの準備ができていることを認識させる方法はありますか? 前もって感謝します

4

1 に答える 1

2

非同期ネットワーク呼び出しをサポートする ExecutorService を使用できます。その時点で返された Future は、完了時にメッセージ パサーとして機能できます。

public class SocketWork<T>{

    private final ExecutorService service = Executors.newSingleThreadExecutor();
    private final Future<T> future;

    public SocketWork(){
        future = service.submit(new SocketWorkCallable<T>());    
    }

    public T register(){
        // all threads entering register will block until 
        // the SocketWorkCallable is completed and returns.
       return future.get();
    }
}

別の方法は、CountdownLatch を使用することです。

public class SocketWork<T>{

    private final CountdownLatch latch = new CountdownLatch(1);
    private T message;

    public void executeSocketWork(){
        //execute work and get message
        this.message = returnedMessage;
        latch.countDown();
    }

    public T register(){
        latch.await();
        return message;
    }
}

ReadWriteLock でも同様のことができます。

ご想像のとおり、これは単一のタスクでのみ機能します。のインスタンスごとSocketWork

于 2013-03-14T16:51:14.883 に答える