2013-05-08 120 views
0

我有一個for循環,它向ArrayList中添加了50,000個對象,如下所示,所以執行時間更長。停止方法直到另一個執行完成?

public List<GoogleFeedEntry> getEntries(Iterator it) { 
    GoogleFeedUtil gfu = new GoogleFeedUtil(host, prefix, domain, serverName); 
    List<GoogleFeedEntry> entry = new ArrayList<GoogleFeedEntry>(); 
    GoogleFeedEntry gfe; 
    GoogleFeedEntryShipping shipping; 
    while (it.hasNext()) { 
     gfe = new GoogleFeedEntry(); 
     shipping = new GoogleFeedEntryShipping(); 
     ProductBO product = (ProductBO) it.next(); 

     entry.add(gfe); 
    } 
    return entry; 
} 

此方法後,我呼籲另一種方法類似

public void doSomething(){ 
     //some code here 
} 

我打電話裏面的另一種方法這兩種方法。如果我把有限數量的對象列出來,那麼它正在解決任何問題。在50,000個對象的情況下它拋出以下異常

java.sql.SQLException: Maximum open cursors exceeded ORA-01000 

我覺得這與oracle無關(如果我是正確的)。我正在加載數據庫中的所有對象。

當我在第一個方法設置斷點,然後它工作正常。

如何停止第二種方法,直到第一種方法執行?

可能是什麼原因?

+0

你的錯誤看起來很直截了當:你不關閉oracle數據庫中的遊標。此外:爲什麼每次迭代都會創建一個新的發貨?你有什麼產品?它沒有用。 – Dariusz 2013-05-08 14:12:39

+0

@Dariusz我爲每個迭代創建運輸,因爲每個對象都有自己的送貨細節。我正在使用它所有的代碼不會發布 – user964147 2013-05-08 14:15:03

+0

,除非你正在做一些特殊的事情,第二種方法沒有運行,直到第一種方法返回 – dstarh 2013-05-08 14:15:22

回答

1

您可以在另一個線程中運行此方法,並使用wait()阻止他並稍後使用notify()方法運行該方法。

相關問題