[英]java - multiple http requests at same time With multi threading in java
[英]java multi threading issue ( same run time )
我有 Java 中的套接字服務器和 PHP 中的其他端套接字客戶端
我想通過多線程同時在java中處理來自PHP的套接字請求,但是java一個接一個,等待完成第一個請求並開始第二個請求,
這是我的 JAVA 代碼:
while (true) {
try {
clientSocket = serverSocket.accept();
int i = 0;
for (i = 0; i < maxClientsCount; i++) {
if (threads[i] == null) {
(threads[i] = new clientThread(clientSocket, threads)).start();
break;
}
}
if (i == maxClientsCount) {
PrintStream os = new PrintStream(clientSocket.getOutputStream());
os.println("Server too busy. Try later.");
os.close();
clientSocket.close();
}
} catch (IOException e) {
System.out.println(e);
}
}
class clientThread extends Thread {
public clientThread(Socket clientSocket, clientThread[] threads) {
this.clientSocket = clientSocket;
this.threads = threads;
maxClientsCount = threads.length;
}
public void run() {
int maxClientsCount = this.maxClientsCount;
clientThread[] threads = this.threads;
try {
in = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
URL aURL = new URL(RecivedURL);
// start out put
System.out.println("host = " + aURL.getHost());
// end out put
粗體行是我的輸出示例,但我想在同一時間同時開始輸出多啟動請求..JAvA 等待一次完成我的代碼的請求..
我不明白你為什么想要兩個以上的線程。
如果你想一個一個地處理請求,你可能只產生一個線程,它只監聽請求並立即通過發送“處理”或“稍后檢查”消息來響應它。 (稱之為監聽線程)
如果向客戶端發送“處理”響應,則連接保持活動狀態,並產生另一個線程,該線程以請求的實際處理結果響應客戶端。 (稱之為處理線程)。
您可以讓偵聽器線程向隊列中的客戶端發送保持活動消息,或者您可以要求它在一段時間后通過請求進行檢查。 您可以通過設置隊列來決定何時隨后響應發送“稍后檢查”消息的客戶端,從而使偵聽器線程更加復雜
從實現 POV 來看,您的主線程可以是您的偵聽器線程,並且可以在需要處理請求時生成一個處理線程。
我假設它執行得如此之快,以至於在可以接受下一個請求之前完成了最后一個請求。
出於調試目的,嘗試添加:
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
進入 run 方法,以便您可以更輕松地檢查它是否真的沒有並行運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.