java - 我应该为 Socket 上的每个读/写创建一个新线程吗?

标签 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 创建一个新线程是否性能太重和/或编码不好,如果是这样,我如何重用同一个线程以获得相同的行为。

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

提前感谢您的任何建议!

最佳答案

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

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

关于java - 我应该为 Socket 上的每个读/写创建一个新线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11108836/

相关文章:

java - 编译时类名未知时调用方法

java - 尝试将列表转换回数组时出现 NullPointerException

javascript - 禁用负责任设计中的元素

windows - 线程可以通过自己的线程 ID 调用 SuspendThread 吗?

java - 如何找到线程何时完成?

java - 去除重复输出

java - 使用 ListView 从另一个 Activity 打印 ArrayList

android - 更改 AndroidManifest.xml 以根据共享首选项设置 LAUNCHER Activity

android - appcompat 在操作栏中显示进度导致 NPE

c++ - 为什么 std::condition_variable 使调度不公平?