我采用异步调用方式,程序结束后数据没有写入,让程序等待10秒再结束数据就写入了,这个异步处理该如何理解?
@Test
public void asynchronousCall() throws Exception {
Map<String,Object> jsonMap = new HashMap<>();
jsonMap.put("user", "jack");
jsonMap.put("postDate", new Date());
jsonMap.put("message", "I'm Jack 11");
//es 默认使用内部版本控制,内部版本从0开始递增,每次增删改版本都会+1
//如果需使用外部版本控制,则需设置versionType为VersionType.EXTERNAL,且外部设置的版本号必须大于等于当前版本
IndexRequest request = new IndexRequest("posts").id("12").source(jsonMap);
client.indexAsync(request, RequestOptions.DEFAULT, new ActionListener<IndexResponse>() {
@Override
public void onResponse(IndexResponse indexResponse) {
//异步调用成功打印id
System.out.println(indexResponse.getId());
}
@Override
public void onFailure(Exception e) {
e.printStackTrace();
System.out.println("执行失败");
}
});
//只有这边让线程sleep10秒数据才写入
Thread.sleep(10000);
System.out.println("完成");
}
@Test
public void asynchronousCall() throws Exception {
Map<String,Object> jsonMap = new HashMap<>();
jsonMap.put("user", "jack");
jsonMap.put("postDate", new Date());
jsonMap.put("message", "I'm Jack 11");
//es 默认使用内部版本控制,内部版本从0开始递增,每次增删改版本都会+1
//如果需使用外部版本控制,则需设置versionType为VersionType.EXTERNAL,且外部设置的版本号必须大于等于当前版本
IndexRequest request = new IndexRequest("posts").id("12").source(jsonMap);
client.indexAsync(request, RequestOptions.DEFAULT, new ActionListener<IndexResponse>() {
@Override
public void onResponse(IndexResponse indexResponse) {
//异步调用成功打印id
System.out.println(indexResponse.getId());
}
@Override
public void onFailure(Exception e) {
e.printStackTrace();
System.out.println("执行失败");
}
});
//只有这边让线程sleep10秒数据才写入
Thread.sleep(10000);
System.out.println("完成");
}
1 个回复
Charele - Cisco4321
赞同来自:
除非你显式调用System.exit之类的程序退出之类的方法。