我应该通过Socket为每次读/写创建一个新线程吗?

时间:2012-06-19 20:25:09

标签: java android multithreading sockets android-asynctask

我正在为Android手机编写一个简单的应用程序,通过套接字连接与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创建一个新线程是否性能过重和/或编码错误,如果是这样,我如何重用相同的线程来获得相同的行为。

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

提前感谢任何建议!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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