我们有一个Java Web应用程序,它通过Web服务连接到CRM。 CRM对最大请求率有约束,因此我们实施同步块以确保我们的应用程序不应超过CRM最大请求率。当服务器启动时,最初它可以工作,但逐渐停止与CRM通信。日志表明它没有进入同步块。
根据Java规范,在synchronized块内发生任何事情(线程的意外终止),它会释放锁。所以我想知道可能导致这个问题的原因。代码提取如下。
class ConnectToCrm {
...
public send(){
...
synchronized (ConnectToCrm.class) {
Thread.sleep(50);
os = url_con.getOutputStream();
os.write(data);
os.flush();
url_con.connect();
rc = url_con.getResponseCode();
}
...
}
}