前言
在项目中要经常使用异步通知来和其他项目进行通信,多线程只是异步通知的一种实现方式,示例代码如下
正文
//创建一个有线程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(MAX_THREADS);
fixedThreadPool.execute(new Runnable() {
public void run() {
boolean continueExec = true;
while (continueExec)
{
try {
logger.info("post:{}", parameters);
UrlEncodedFormEntity entity;
entity = new UrlEncodedFormEntity(parameters);
entity.setContentEncoding("utf-8");
//Content-Type: text/html; charset=UTF-8
entity.setContentType("application/x-www-form-urlencoded");
post.setEntity(entity);
HttpClient httpClient = HttpClientFactory.factory(connectionTimeout, soTimeout);
String resp = httpClient.execute(post, new BasicResponseHandler());
logger.info("resp body:{}", resp);
continueExec = false;
} catch (Exception e) {
logger.error("DoNotifyFlow error:", e);
long now = CommonTool.getCurrentTimeSeconds();
if (now - startTime >= 60)
{
continueExec = false;
}
try {
Thread.sleep(3 * 1000);
} catch (InterruptedException e1) {
logger.error("Thread.sleep error:", e1);
}
}
}
}
});
fixedThreadPool.shutdown();
在这里,使用线程池来发送http请求,异步通知第三方服务接受者,需要注意的是,在使用完以后要关闭线程池(有待详细了解,因为在其他人的博客中有看到,使用完不用关闭?貌似其他的地方也会用到…..)
总结
这里只是做个记录来做个实例,在以后会学习更好的方式来实现~~~