簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM