非同步通知之多執行緒實現
阿新 • • 發佈:2018-12-09
前言
在專案中要經常使用非同步通知來和其他專案進行通訊,多執行緒只是非同步通知的一種實現方式,示例程式碼如下
正文
//建立一個有執行緒池
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請求,非同步通知第三方服務接受者,需要注意的是,在使用完以後要關閉執行緒池(有待詳細瞭解,因為在其他人的部落格中有看到,使用完不用關閉?貌似其他的地方也會用到…..)
總結
這裡只是做個記錄來做個例項,在以後會學習更好的方式來實現~~~