两个线程共享静态变量

时间:2014-02-21 21:45:46

标签: java multithreading stack-overflow shared

我想运行一个简单的服务器 - 客户端程序,客户端检查每个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(){
    //..
}

1 个答案:

答案 0 :(得分:2)

您的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(),另一个调用构造函数。因为在这种情况下,一个人会调用另一个,直到你的内存不足为止。