2012-09-04 107 views
1

在Java代碼,我產生一個線程,其每秒從模擬器集DIS包,並且嘗試 KML格式輸出。在我的Java代碼中,我創建了一個帶有樣式和地標和多邊形的文檔。每隔一秒我都會看到「marshal」API例程確實會用我的數據創建一個KML文件。然而,隨機有時它創建一個完整的文件,有時它創建一個零長度文件。甚至當我把我的DIS包發生器斷開,並留下我的Java代碼仍然在運行,它會繼續隨機創建一個完整的文件,有時會造成零長度文件。當我每秒鐘更改我的計時器到每10秒時,行爲每10秒發生一次。KML編組產生零長度文件

我嘗試使用編組()到一個文件對象,並且到OutputStream對象;同樣奇怪的行爲。

回答

0

這可能是由於併發訪問。創建一個編組是一個昂貴的操作,需要時間,據我所知編組不是線程安全的。我使用的Restlet JAXB的連接器,加上JAK,這是關於如何創建marshallers並以線程方式緩存他們good example

/** Use thread identity to preserve safety of access to marshalers. */ 
private final ThreadLocal<javax.xml.bind.Marshaller> marshaller = new ThreadLocal<javax.xml.bind.Marshaller>() { 

看到有編組是如何在一個同步的方法創建,然後存儲在一個ThreadLocal變量中。