Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程睡眠使主服务器睡眠_Java_Multithreading_Server_Thread Sleep_Java Server - Fatal编程技术网

Java 线程睡眠使主服务器睡眠

Java 线程睡眠使主服务器睡眠,java,multithreading,server,thread-sleep,java-server,Java,Multithreading,Server,Thread Sleep,Java Server,我想写一个java多线程服务器。我使用了以下代码: MultiThreadedServer.java: package servers; import java.net.ServerSocket; import java.net.Socket; import java.io.IOException; public class MultiThreadedServer implements Runnable{ protected int serverPort =

我想写一个java多线程服务器。我使用了以下代码:

MultiThreadedServer.java:

package servers;

import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;

public class MultiThreadedServer implements Runnable{

    protected int          serverPort   = 8080;
    protected ServerSocket serverSocket = null;
    protected boolean      isStopped    = false;
    protected Thread       runningThread= null;

    public MultiThreadedServer(int port){
        this.serverPort = port;
    }

    public void run(){
        synchronized(this){
            this.runningThread = Thread.currentThread();
        }
        openServerSocket();
        while(! isStopped()){
            Socket clientSocket = null;
            try {
                clientSocket = this.serverSocket.accept();
            } catch (IOException e) {
                if(isStopped()) {
                    System.out.println("Server Stopped.") ;
                    return;
                }
                throw new RuntimeException(
                    "Error accepting client connection", e);
            }
            System.out.println("Request Entered: " + System.currentTimeMillis());
            new Thread(
                new WorkerRunnable(
                    clientSocket, "Multithreaded Server")
            ).start();
        }
        System.out.println("Server Stopped.") ;
    }


    private synchronized boolean isStopped() {
        return this.isStopped;
    }

    public synchronized void stop(){
        this.isStopped = true;
        try {
            this.serverSocket.close();
        } catch (IOException e) {
            throw new RuntimeException("Error closing server", e);
        }
    }

    private void openServerSocket() {
        try {
            this.serverSocket = new ServerSocket(this.serverPort);
        } catch (IOException e) {
            throw new RuntimeException("Cannot open port 8080", e);
        }
    }

}
WorkerRunnable.java:

package servers;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.net.Socket;

public class WorkerRunnable implements Runnable{
protected Socket clientSocket = null;
protected String serverText   = null;

public WorkerRunnable(Socket clientSocket, String serverText) {
    this.clientSocket = clientSocket;
    this.serverText   = serverText;
}

public void run() {
    try {
        InputStream input  = clientSocket.getInputStream();
        OutputStream output = clientSocket.getOutputStream();
        long time = System.currentTimeMillis();
        output.write(("HTTP/1.1 200 OK\n\nWorkerRunnable: " + this.serverText + " - " +time +"").getBytes());
        Thread.sleep(2000);
        output.close();
        input.close();
        System.out.println("Request processed: " + time);
    } catch (IOException | InterruptedException e) {
        //report exception somewhere.
        e.printStackTrace();
    }
}
}
我使用以下代码运行主服务器:

    MultiThreadedServer server = new MultiThreadedServer(9000);
    new Thread(server).start();
然后,我在web浏览器中打开了3个选项卡,并全部输入。 但是选项卡不会同时运行,响应会在两秒钟后收到

我发现当我在每个WorkerRunnable线程中运行“Thread.sleep”时,多线程服务器不再接受任何请求。
是否有同时运行所有线程的解决方案?

请在此处显示您自己的代码,而不是在链接中显示。让我们试着看看你可能做错了什么。后编辑,@hovercraftfullofeelsomeone帮帮我。对不起,我看不出你的代码中有错误,但如果你在另一天没有得到一个像样的答案,我可以利用我的代表对你的问题进行悬赏,这会引起更多的关注。但话说回来,你确定这是导致问题的代码吗?@HovercraftFullOfEels谢谢你的回答。是的,我肯定。此代码没有任何错误,但请求不会同时处理,这是我的问题。请在此处显示您自己的代码,而不是在链接中显示。让我们试着看看你可能做错了什么。后编辑,@hovercraftfullofeelsomeone帮帮我。对不起,我看不出你的代码中有错误,但如果你在另一天没有得到一个像样的答案,我可以利用我的代表对你的问题进行悬赏,这会引起更多的关注。但话说回来,你确定这是导致问题的代码吗?@HovercraftFullOfEels谢谢你的回答。是的,我肯定。这段代码没有任何错误,但请求不会并发处理,这是我的问题。