【问题标题】:Java ScheduledThreadPool multithreads stops after some timeJava ScheduledThreadPool 多线程在一段时间后停止
【发布时间】:2011-05-27 22:46:31
【问题描述】:

我正在开发一个 J2SE 应用程序,它可以同步存储在不同服务器上的四个数据库中的 184 辆汽车的 GPS 信息。我为每辆车创建一个线程并存储在 ScheduledThreadPool 中

    ScheduledExecutorService executor = Executors.newScheduledThreadPool(20);

    for (int i = 0; i < cars.size(); i++) {
        Car vec_temp = cars.get(i);
        SyncThread carThread = new SyncThread(q, vec_temp, reintentos);
        long sleep = carThread.calculateVehicleDelay();
        executor.scheduleAtFixedRate(hilo, 0, sleep, MILLISECONDS);
    }

SocketServer 在 XML 数据中检索纬度和经度信息,因此在 SyncThread 类中,我实例化一个 Socket 并请求信息并关闭该连接,并每 15 分钟进行一次...

由于某种原因,应用开始运行良好,但有时会停止运行,没有异常...

jar 正在作为 Windows 服务运行。

【问题讨论】:

    标签: java multithreading scheduling executorservice


    【解决方案1】:

    根据API

    如果任务的任何执行 遇到异常,后续 处决被禁止。

    话虽如此,如果您将代码发布在SyncThread 中会很好,否则几乎无法为您提供帮助。另外,hilo 是什么?为什么要安排 hilo 执行,而不是 carThread

    【讨论】:

    • SyncThread 只是简单地连接到一个套接字服务器 kkSocket = new Socket(ip, port); out = new PrintWriter(kkSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));他们输出一条消息并收到一条新的响应消息,最后关闭连接......每 15 分钟执行一次
    【解决方案2】:

    尝试在您的 Runnable 实现中放置一个 try-catch 块。想法是抑制任何异常被抛出给执行者。理想情况下,如果您可以在 catch 块中记录此事件并避免将其丢弃,那么您的应用程序应该会按预期工作,并且您将能够确定之后发生的事情。

    【讨论】:

    • 好的 Yohan 我试过了并抛出了这个 java.lang.Exception: Connection timed out: connect 它似乎是套接字连接有什么想法吗?
    • @marman 是的。这意味着您尝试建立的网络连接会超时,因为另一端没有按预期及时响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2015-07-05
    相关资源
    最近更新 更多