需求:用户单击某个按钮后服务端要执行一个长时间(比如3-4个小时)作业,同时要求立即告诉用户作业已经开始执行;这个作业的创建是随机的,只有用户单击按钮时才创建。
如果我直接在这个按钮的action方法中写scheduler,job,trigger这些代码,则运行需要很长时间,最重要的是不能立即返回执行的结果,用户无法知晓当前任务的执行情况。我想要一个方案,用户单击完按钮,服务端能立即把这个任务的已经开始执行这样的信息返回给客户端,而服务端可以正常执行这个任务,待完成后可以利用listener来获取任务的执行情况;
你可以在用户单击按钮时,action中新建这个作业,并把它放到一个队列中,然后就立即返回,告诉用户已经开始执行,
而那个队列中的作业就由后台的一个线程在不停地从中取出作业来运行,如果没有作业的话,则等待新的作业到来
其实就是在你执行前发个事件,或者在有需要的时候发个事件,如果事件里执行的时间不长,用同步的方式就可以了,JAVA提供了线程的观察者模式的实现,或者你自己可以写一个,如果时间很长就可以用,有种做法叫事件驱动编程,就是说,用这种做法做可以避免多线程并发的一些耦合问题。
http://tech.ddvip.com/2006-04/11438220601623.html
这篇文章是最近我觉得一个篇相当好的文章,里面虽然说是swing的线程机制,但是其实这种思想无论是在web还是在swing都一样受用
希望对你有帮助。