【问题标题】:Should I create a new thread for each read/write over Socket?我应该为每个通过 Socket 读/写的线程创建一个新线程吗?
【发布时间】:2012-06-19 20:25:09
【问题描述】:

我正在为安卓手机编写一个简单的应用程序,通过套接字连接与 PC 进行通信。

手机可以随时写或接收消息,计算机也可以。 到目前为止我使用的解决方案是这样的:

Create a thread and call READ in it.
Run an infinte loop.
    Check if thread has finished,
        If so grab the READ and process,
        Then start a new thread also calling read.
    Check to see if another object working in another thread wants to write,
        If so grab and write.

具体来说,我使用 Android API 中的 AsyncTask 来运行线程。

一切正常,但我想知道为每个 READ 创建一个新线程是否性能太高和/或编码不好,如果是这样,我如何重用相同的线程以具有相同的行为。

或者,有没有更好的方法来处理这种情况?

提前感谢您的任何建议!

【问题讨论】:

  • 您认为有多少连接是同时的?
  • 在这个应用程序中,只有一个客户端。我只是使用线程,这样当应用程序可能想要进行 WRITE 时,READ 不会阻塞。

标签: java android multithreading sockets android-asynctask


【解决方案1】:

是的,为每次读取创建一个新线程对于您所描述的需求来说效率非常低。

相反,考虑创建一个线程,一个List<your data type> 来保存读取,以及一个信号量来标记数据可用。您的线程读取每条消息,将其放入列表中,并将信号量发布到任何等待数据的地方。 'whatever' 然后接收列表中的任何内容,直到将其清空,然后返回等待信号量。

【讨论】:

  • 仅供参考,但共享要读取的数据的更好方法可能是使用BlockingQueue。这将结合List 和信号量。
  • 啊,我认为这可能是最容易实现的解决方案。我已经完成了所有设置和工作——我只是对性能感兴趣。这似乎很容易实现到我当前的程序中并解决问题。
【解决方案2】:

你需要一个读线程和一个写线程。两者都应该使用 BlockingQueue 与应用程序的其余部分交互。虽然我不明白你为什么会有多个线程要写。

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多