日期:2014-05-18  浏览次数:20951 次

java定时ThreadPool的scheduleAtFixedRate函数问题
问题描述:使用ThreadPool的scheduleAtFixedRate函数做定时触发任务,在同一个触发时间点只会有一个线程会启动,但是现在遇到的问题是在一个触发时间点,同时启动了4个线程,
请问下各位大侠,在什么场景或情况下会出现在同一个触发时间点会起4个线程?

备注:在触发4个线程之前,scheduleAtFixedRate函数都是在同一个触发时间点,只会启动一个线程;
      在触发4个线程之后  ,scheduleAtFixedRate函数都是在同一个触发时间点,只会启动一个线程;

    threadPool.scheduleAtFixedRate(runnable,
            getDelayTime(),
           getExePeriods(),
            TimeUnit.SECONDS);

各位大侠,紧急啊。

------解决方案--------------------
1 Executors.newScheduledThreadPool(4); coresize =4
2 差不多同一时间启动了scheduleAtFixedRate,使用的统一runable对象。
可能只是一个场景,希望对你有帮助。


import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduleThreadTest {

    /**
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        ScheduledExecutorService service = null;
        try {
            service = Executors.newScheduledThreadPool(4);
            final Runnable myRunable = new Runnable() {
                public void run() {
                    System.out.println(Thread.currentThread().getName());
                }
            };

            service.scheduleAtFixedRate(myRunable, 0, 1, TimeUnit.SECONDS);
            service.scheduleAtFixedRate(myRunable, 0, 1, TimeUnit.SECONDS);
            service.scheduleAtFixedRate(myRunable, 0, 1, TimeUnit.SECONDS);
            service.scheduleAtFixedRate(myRunable, 0, 1, TimeUnit.SECONDS);

            service.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
        } finally {
            if (service != null) {
  &n