如何在一个线程上使用Selector在不同的线程上注册多个SocketChannel

时间:2014-11-20 06:14:02

标签: java android multithreading socketchannel

我正在开发一个Android应用程序,我在其中使用SocketChannel和Selector将网络请求发送到我的服务器。

我在一个线程上有一个选择器,注册了OP_CONNECTOP_WRITEOP_READ,并调用select()方法接收这些事件。

任何人都可以建议我使用单个选择器进行SocketChannel多线程注册的正确方法吗?

1 个答案:

答案 0 :(得分:1)

耗时的部分是对频道的实际读/写。所以基本上你会

  1. 设置一组套接字通道
  2. 将所有这些注册到选择器。
  3. 在主要选择主题中致电select()。一旦返回值> 0,获取一组选择键,并确定是否要在相关通道上读/写。
  4. 创建一个线程池。对该池的所有通道进行实际读/写操作。或者,如果您想要零对象循环,请缓存您的Runnable实例。