Java 双线程共享静态变量
我想运行一个简单的服务器-客户端程序,其中客户端每5秒检查一个最佳服务器,并连接始终最佳的服务器。所以我写了下面的代码,但我得到了stackoverflow错误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);
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秒检查一次最好的服务器