首页  

HTTP调用卡住的案例     所属分类 java 浏览量 687
某系统数据通过 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 实例

创业的一些风险