如何使用多线程从套接字读取请求

安尼特

我有以下代码从套接字读取字符串并处理它。从套接字读取字符串后,我正在创建一个新线程来处理请求。这样,我可以让多个线程同时处理传入的请求。

public void process(Socket socket) throws Exception {
    while (true) {
        String request = readFromSocket(socket);
        new Thread(() -> {
            try {
                System.out.println(request); // [edit]: I had omitted this line before as I thought it would be irrelevant
                response = processRequest(request); // <-- request could get modified
            } catch (Exception e) {
                // TODO: Log error and print stack-trace
            }
        }).start();
    }
}

这里的问题是,“请求”可能会在新线程开始处理它之前被修改。我是多线程的新手,我阅读了一些涵盖基础知识的网站。我仍然不确定如何解决这里的问题。

使用 synchronized 来等待新线程完成处理请求会破坏多线程的目的。一旦我收到请求,我想将它发送到一个新线程,以便它可以开始处理请求,而父线程可以读取下一个请求。

有关如何解决此问题的任何帮助?谢谢!

[在卢克回答后编辑]

在我的场景中,请求将是一个文件名。您可以根据目录的大小获得多个请求。当我在文件较少的目录上尝试我的代码时,一切都很好。但是当我对一个包含数千个文件的目录运行我的代码时,事情变得很奇怪。

说在 readFromSocket 之后,线程 1 有请求 X,线程 2 有请求 Y。但是在 processRequest() 中,线程 1 开始处理请求 Y。

鬼猫

您的代码存在各种问题。

正如您自己认为的那样,在 P 产生新结果之前,一个线程 P 产生可能被消耗的东西或不被另一个线程消耗的东西是不理想的。

因此,像您一样简单地存储值是不好的做法。合理的答案是:使用旨在允许“一个线程放入东西,其他线程取出东西”的数据结构ArrayBlockingQueue

然后:为一项工作创建一个线程,然后将其丢弃非常浪费时间的。

相反:创建一个ExecutorService,并将任务提交到该服务中。该服务可以基于一个线程,可以重用;而不是扔掉。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用线程JAVA从套接字读取输入

来自分类Dev

套接字用于多线程?

来自分类Dev

使用libev的多线程套接字服务器

来自分类Dev

套接字多线程-读取输入流会使线程暂停

来自分类Dev

Python-多线程套接字

来自分类Dev

带套接字的多线程文件传输

来自分类Dev

带套接字的多线程JAVA

来自分类Dev

带套接字的Java GUI多线程

来自分类Dev

Python-多线程套接字

来自分类Dev

TCP IP 套接字和多线程

来自分类Dev

使用null检查Java从套接字读取HTTP请求

来自分类Dev

在HashLink上使用套接字读取HTTP请求

来自分类Dev

提升:多线程性能,线程/套接字的重用

来自分类Dev

提升:多线程性能,线程/套接字的重用

来自分类Dev

如何在python中运行多线程以进行多客户端套接字编程?

来自分类Dev

在多线程HTTP服务器中发送后,如何干净地关闭套接字?

来自分类Dev

使用多线程的基本套接字聊天程序会引发错误

来自分类Dev

在多线程套接字服务器上使用事件

来自分类Dev

从线程中的Java TCP套接字读取

来自分类Dev

重试在套接字级别读取客户请求

来自分类Dev

Vert.x多线程网络套接字

来自分类Dev

一次从多个套接字接收数据(多线程)

来自分类Dev

python中(多线程)套接字的列表/数组

来自分类Dev

C ++套接字,多线程和输出处理

来自分类Dev

Vert.x多线程网络套接字

来自分类Dev

python 多线程和套接字连接问题

来自分类Dev

多线程和套接字编程问题(多连接)

来自分类Dev

使用套接字的HTTP请求

来自分类Dev

python套接字如何使用相同的套接字连接正确重定向http / s请求?