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