HTTP调用卡住的案例
所属分类 java
浏览量 807
某系统数据通过 http 接口获取
数据会做缓存,使用锁机制 保证只有一个线程去获取数据
发现数据一直不更新,数据更新时间停留在 五天前,
后台监控计数 cacheHit2 一直在增加 ,说明 锁没有释放
ReentrantLock locktmp ...;
// 使用lock ,避免多个线程同时去抓取数据
// 不要使用 tryLock !!!
// if(dto!=null && !locktmp.tryLock())
// 如果锁被占用,返回老数据
if(dto!=null && locktmp.isLocked()){
RunStatusUtil.runStatus.updateCount("cacheHit2");
return dto;
}
try{
locktmp.lock();
return loadDataUseLock(...);
}finally{
locktmp.unlock();
}
loadDataUseLock 通过 http 调用 获取数据
使用jdk HttpURLConnection 发送 http 请求时 ,的确没有设置 连接超时和读超时
public static String doGet(String url,String charset_) throws Exception {
URL urlo = new URL(url);
SslUtils.ignoreSsl();
URLConnection conn = urlo.openConnection();
HttpURLConnection huc = (HttpURLConnection) conn;
// 增加连接超时和读超时 ms
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
上一篇
下一篇
C++ RAII 简介
GO 和 RUST
gcc编译过程
cc gcc g++ 区别
makefile 实例
创业的一些风险