今天在使用ScheduledExecutorService的时候,发现scheduleWithFixedDelay和scheduleAtFixedRate的参数都是Runnable,于是想到使用FutureTask封装一下:FutureTask<String> task = new FutureTask<String>(new ComputeTask(1000));
接着在调用scheduleWithFixedDelay的时候就出现错误了,发现call函数只执行了一次,然后就卡住了。。。
随后查看了一下FutureTask的源码,发现执行完run之后state标记会由RUNNING变为RAN,所以第二次进入的时候就不会再执行了。也就是说,FutureTask进入完成状态,会永远停止在这个状态。