2011-05-27 91 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

相關問題