异步任务系列一
写在这之前,我啰嗦几句吧,说说如何把自己的个人编程能力提高一个档次,可能基本的java代码我们已经写了千遍万遍了,感觉技术总停留在这个层次,无法突破,这可能是一般程序员所要经历的一个过程,这个时候你需要从前辈,牛人那里汲取营养,无非是仔细研磨开源代码,从中理解他们的编程思想,编程习惯,解决问题的方式,想想如果自己来实现,我们会怎么实现,当然,这个过程是异常艰辛的,可能看着一堆堆的代码,网状似的交横,眼睛都看干涩了,但你不能走马观花,似懂非懂,很难从中学到精髓,你必须看了一遍又一遍,仔细推敲,我相信久了,不经之中你已在慢慢突破自己了,当然也许是个人之言,但是为己之经历,一切贵在沉静坚持,好了,说正题了。
异步任务调度:
提到这个,不觉想到了Timer,TimerTask,FutureTask,Future,ScheduledExecutorService等
说起来,Timer,TimerTask大家可能使用到更多一点,然而,这个类其实提供的功能有限,不够灵活,其中还存在一个最大的坏处就是方法体内如果处理抛出异常,可能停止了调度任务的能力,而ScheduledExecutorService这个异步类则解决了这一点,好了贴上代码
?
import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class ScheduledExecutorTest {//线程池能按时间计划来执行任务,允许用户设定计划执行任务的时间,int类型的参数是设定//线程池中线程的最小数目。当任务较多时,线程池可能会自动创建更多的工作线程来执行任务public ScheduledExecutorService scheduExec = Executors.newScheduledThreadPool(1);//启动计时器public void lanuchTimer(){Runnable task = new Runnable() {public void run() {System.out.println("难道就不执行了吗?");throw new RuntimeException();}};scheduExec.scheduleWithFixedDelay(task, 1000*5, 1000*10, TimeUnit.MILLISECONDS);}//添加新任务public void addOneTask(){Runnable task = new Runnable() {public void run() {System.out.println("welcome to china");}};scheduExec.scheduleWithFixedDelay(task, 1000*1, 1000, TimeUnit.MILLISECONDS);}public static void main(String[] args) throws Exception {ScheduledExecutorTest test = new ScheduledExecutorTest();test.lanuchTimer();Thread.sleep(1000*5);//5秒钟之后添加新任务test.addOneTask();}}
?
? ? 在下面篇幅,会慢慢讲解下异步任务系统及实战。
?