我有以下一段代码,它从套接字读取一个字符串并对其进行处理。从套接字读取字符串后,我正在创建一个新线程来处理请求。这样,我可以有多个线程同时处理传入的请求。如何使用多线程从套接字读取请求
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.
请学习如何使用线程池。 – Snickers3192
已经降低了投票的人,请你澄清downvote的原因吗? – Anit