2014-02-21 7 views
0

클라이언트가 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

'while (true)'huh? –

+0

클라이언트 또는 서버입니까? 서버 인 경우 ServerSocket 클래스를 살펴볼 수 있습니다. http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html – Nathan

+0

아니요 클라이언트입니다. 클라이언트는 항상 rtt의 측면에서 최상의 서버를 연결하고 그는 각 5 초 bestserver를 확인합니다 – user1914367

답변

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()를 호출하고 다른 생성자를 호출합니다. 이 경우부터 메모리가 부족해질 때까지 다른 하나를 호출합니다.

+0

하지만 심지어 내가 삭제하는 동안, 나는 여전히 같은 오류가 있습니다 – user1914367

관련 문제