【问题标题】:scheduleAtFixedRate() is being called twicescheduleAtFixedRate() 被调用两次
【发布时间】:2015-12-20 19:13:05
【问题描述】:

日志:

[pool-1-thread-1] TRACE apns.ApnsPushConnection - 输入方法 queryFeedbackService 参数 [pool-3-thread-1] TRACE apns.ApnsPushConnection - 输入方法 queryFeedbackService 参数 [pool-1-thread-1] TRACE apns.ApnsPushConnection - 返回方法 queryFeedbackService
[pool-3-thread-1] TRACE apns.ApnsPushConnection - 返回方法 queryFeedbackService

//In Singleton class constructor
ScheduledExectorService obj = Executors.newSingleThreadScheduledExecutor();


obj.scheduleAtFixedDelay(new runnable(){

     public void run(){ 
     classObj.queryFeedbackService();
}  
}),20,60,TimeUnit.SECONDS);     



//method called by thread      
public void queryFeedbackService()
{

     code here

}

【问题讨论】:

  • 请发布您的代码..
  • 嗨redflar3,请看我下面的评论

标签: java threadpool executorservice threadpoolexecutor


【解决方案1】:

Jean 回答的确实有 2 个池。

但在我这里,我的项目被加载到由 Spring 初始化的 Jetty 服务器中。

也在 Jetty 服务器内部 - 它正在为从 service-context.xml 文件初始化的 Spring bean 创建容器。

所以它被调用了两次,导致创建了两个池

感谢所有评论并尝试解决我的问题的人。 意义重大:)

【讨论】:

    【解决方案2】:

    从日志中,您有几个正在运行的池:pool-1 和 pool-3。

    您可能希望确保只初始化一个池。

    【讨论】:

    • 是的,琼,你是对的。但我不明白它是如何发生的。
    • ScheduledExecutorService obj = Executors.newSingleThreadScheduledExecutor();我就是这样初始化的
    • 但是你确定这段代码只被调用了一次吗?
    • But I am not getting how it is happenning. 没有代码,我们无法弄清楚
    • 你是对的 jhamon,但代码有点分散在不同的地方。准确地说,在我的单例类构造函数中,我已经创建了上面评论过的对象。然后调用 obj.scheduleAtFixedRate(feedbackListener, 20, 60, TimeUnit.SECONDS); feedbacklistener 是调用日志中显示的方法的线程
    猜你喜欢
    • 2016-04-01
    • 2012-05-05
    • 2017-01-19
    • 2014-02-04
    • 2016-12-13
    • 2016-01-30
    • 2019-04-04
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多