Java 双线程共享静态变量

Java 双线程共享静态变量,java,multithreading,stack-overflow,shared,Java,Multithreading,Stack Overflow,Shared,我想运行一个简单的服务器-客户端程序,其中客户端每5秒检查一个最佳服务器,并连接始终最佳的服务器。所以我写了下面的代码,但我得到了stackoverflow错误 public static void main(String[] args) throws IOException, InterruptedException { RTT best = null; BestServer bestserver = new BestServer(best);

我想运行一个简单的服务器-客户端程序,其中客户端每5秒检查一个最佳服务器,并连接始终最佳的服务器。所以我写了下面的代码,但我得到了stackoverflow错误

public static void main(String[] args) throws IOException, InterruptedException {
        RTT best = null;
        BestServer bestserver = new BestServer(best);

        Socket clientSocket = new Socket(bestserver.bestserver.ip, 6789);
        System.out.println("I connect best server");
}   

public class BestServer implements Runnable{

    static RTT bestserver;

    public BestServer(RTT best) throws InterruptedException{
        bestserver = best;
        findBest();
    }

    public static void findBest() throws InterruptedException{

        Thread t = new Thread(new BestServer(bestserver));
        t.start();
        t.sleep(5000);
}

public void run(){
    //..
}

您的
StackOverflow
来自此行

while(true){
    Socket clientSocket = new Socket(bestserver.bestserver.ip, 6789);
    System.out.println("I connect best server");
}
在内存耗尽之前,您一直在创建套接字

您需要设置一定数量的套接字,否则您将始终耗尽内存

另一个问题是这两条线:

public BestServer(RTT best) throws InterruptedException{
    bestserver = best;
    findBest();
}

public static void findBest() throws InterruptedException{
    Thread t = new Thread(new BestServer(bestserver));
}

一个调用
findbest()
,另一个调用构造函数。在这种情况下,一个将调用另一个,直到内存耗尽。

但即使我删除了,我仍然有相同的错误这是客户端还是服务器?如果是服务器,您可能需要查看ServerSocket类。不,是客户。在rtt方面,客户机总是连接最好的服务器,他每5秒检查一次最好的服务器