java多线程问题(运行时间相同)

时间:2014-03-24 22:33:54

标签: java multithreading sockets

我在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

BOLD行是我的输出示例,但我想同时同时启动多启动请求的输出.JAvA等我的代码一次完成请求..

2 个答案:

答案 0 :(得分:1)

我不明白你为什么要在这里找到两个以上的线程。

如果您想逐个处理请求,您可能只生成一个只侦听请求的线程,并通过发送“处理”或“稍后再检查”消息立即响应它。 (称之为监听器线程)

如果向客户端发送“处理”响应,则连接保持活动,并生成另一个线程,该线程使用实际处理的请求结果响应客户端。 (称之为处理线程)。

您可以让侦听器线程向队列中的客户端发送保持活动消息,或者您可以要求它在一段时间后通过请求进行检查。您可以通过设置队列来决定何时随后响应发送“稍后再回来”消息的客户端,使侦听器线程更复杂

从实现POV开始,你的主线程可能是你的监听器线程,它可以在处理请求时产生一个处理线程。

答案 1 :(得分:1)

我认为它的执行速度太快,以至于在下一个请求被接受之前完成了最后一个请求。

出于调试目的,请尝试添加:

try {
  Thread.sleep(1000);
} catch (InterruptedException e) {
  Thread.currentThread().interrupt();
}

进入run方法,这样你就可以更容易地检查它是否真的没有并行运行。