当前位置: 代码迷 >> J2EE >> 粗大事了~兄弟们,ScheduledExecutorService的scheduleAtFixedRate方法如何会这样?
  详细解决方案

粗大事了~兄弟们,ScheduledExecutorService的scheduleAtFixedRate方法如何会这样?

热度:26   发布时间:2016-04-21 21:33:01.0
粗大事了~~~~兄弟们,ScheduledExecutorService的scheduleAtFixedRate方法怎么会这样???????
本帖最后由 sunli880127 于 2013-11-28 10:54:12 编辑

public class TestSchedulerThreadPool {

    public static void main(String[] args) {

        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(10);
        executorService.scheduleAtFixedRate(new Cat(),1,2, TimeUnit.SECONDS);

    }

}

class Cat implements Runnable{

    @Override
    public void run() {
        System.out.println("我起来了");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            System.out.println("shit");
        }
        System.out.println("我回去了");
    }
}

这玩意的执行结果是:
我起来了
我回去了
我起来了
我回去了
我起来了
我回去了

这个感觉肿么像是Executors.newSingleThreadScheduledExecutor()单线程执行框架的结果呢?
明明应该是每两秒起一个线程的,现在非要5秒起一个,居然要等待第一个线程结束才起下一个。
不信都考到自己电脑试一试

ScheduledExecutor JAVA 定时任务 线程池框架

------解决方案--------------------
好好看看JavaDOC吧.....
------解决方案--------------------
这是定时任务,就是定期执行的。
而且,你这里就一个new Cat()线程吧?

ThreadPoolExecutor应该能满足你多线程的实验。
------解决方案--------------------
ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
                                     long initialDelay,
                                     long period,
                                     TimeUnit unit)Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given period; that is executions will commence after initialDelay then initialDelay+period, then initialDelay + 2 * period, and so on. If any execution of the task encounters an exception, subsequent executions are suppressed. Otherwise, the task will only terminate via cancellation or termination of the executor. If any execution of this task takes longer than its period, then subsequent executions may start late, but will not concurrently execute.