Java-在数据接收时将事件激发到另一个线程



我必须编写一个管理多个Datagram套接字的服务器。我知道java.nio的选择器功能,它允许异步管理不同的套接字但是,在解析完消息之后,我需要向另一个线程触发一个事件(可选地使用一些参数(。有没有办法让其他线程"注册"到管理套接字的线程,并让它们知道数据已经准备好了?提前感谢

您可以使用支持异步网络调用的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();
    }
}

另一种选择是使用倒计时锁存器。

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 的实例

相关内容

  • 没有找到相关文章

最新更新