首先我们来一个实际的应用场景:用户请求一些报表数据,但是这些数据需要实时计算,那么用户要等待的时间就会很久,这时候我们就可以用异步的方式来处理,更通俗的场景就是生活中烧开水的时候,你可以去包饺子。蛋糕店定蛋糕,你可以先下单,不用在那里一直等着,约定个时间过来取。以下的DEMO是按照生成报表异步实际需求!
public class Host {
public static void main(String[] args) {
("main BEGIN");
Host host = new Host();
();
();
("main END");
}
public void request() {
("(1)用户请求生成统计报表");
//启动新的线程
new Thread() {
public void run() {
try {
("线程休息5秒-------------");
(5000);
} catch (InterruptedException e) {
();
}
("(3)真正在后台计算,最后生成指定路径下的报表,并修改数据库记录的状态为《已生成》");
}
}.start();
("(2)告诉用户正在生成,数据库写入一条报表的路径,但是状态是《正在生成》。");
}
}
注意:你可能还要保证生成报表的线程是否可靠,报表丢失,重复处理等机制。