我有以下一段代碼,它從套接字讀取一個字符串並對其進行處理。從套接字讀取字符串後,我正在創建一個新線程來處理請求。這樣,我可以有多個線程同時處理傳入的請求。如何使用多線程從套接字讀取請求
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