2011-05-27 114 views
1

我正在开发一个J2SE应用程序,用于同步存储在不同服务器上的四个数据库的184辆汽车的GPS信息。对于每一辆汽车创建一个线程和存储在ScheduledThreadPoolJava 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分钟......

应用开始由于某种原因,在工作一段时间后停止很大,没有异常运行...

罐子运行作为Windows服务。

+1

你的问题是什么? – highlycaffeinated 2011-05-27 22:51:02

回答

3

按照API

如果 遇到异常的任务的任何执行,随后 执行被抑制。

这样说,如果您在SyncThread之内发布代码会很好,否则几乎不可能帮助您。另外,什么是hilo?你为什么要安排执行hilo,而不是carThread

+0

哎呀!我的错误是carThread正确... – marman 2011-05-30 14:08:38

+0

SyncThread只是简单地连接到套接字服务器kkSocket = new Socket(ip,port); \t \t out = new PrintWriter(kkSocket.getOutputStream(),true); \t \t in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));他们会输出一条消息并接收新的响应消息,最后关闭连接...并每15分钟执行一次此操作。 – marman 2011-05-30 14:10:20

+0

@marman您每次都使用finally来关闭套接字? – extraneon 2011-05-30 18:49:51

1

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

+0

好的Yohan我试过并抛出这个java.lang.Exception:连接超时:连接它似乎是任何想法的套接字连接? – marman 2011-05-30 15:21:11

+1

@marman是的。这意味着您尝试建立的网络连接超时,因为另一端没有按预期做出及时响应。 – 2011-05-30 18:43:23

相关问题