我目前有以下設置。運行一段時間後,我正在處理內存異常;我懷疑main中的for循環會導致太多的備份方法調用。如果我不希望增加線程池大小,最好的方法是抑制調用?如何調節方法調用以允許線程完成
public class ManagedThreads {
private final static ExecutorService ex = Executors.newFixedThreadPool(10);
public static void myMethod(final int i) {
ex.execute(new Runnable() {
public void run() {
// method body using i
}
});
}
public static void main(String[] args) {
for (int i = 0; i < 1000000000; ++i)
myMethod(i);
}
}
編輯
我的意思是證明我的指數想過去爲循環的可運行。
它的內存不足,因爲它創建了數以百萬計的'Runnable'對象並將它們存儲在執行程序隊列中的速度比它們可以執行的快。解決這個問題的唯一方法是以某種方式減慢for循環。例如,您可以讓'myMethod'記錄尚未執行的runnable數量,並且如果它高於某個數字,則會阻止直到它低於該數字。 – SamYonnou
節流高度依賴於'方法體'。你可能不需要那些數十億的runnables。取決於'方法體'你可能只需要改變邏輯來支持節流。 – Claudiu
@csoroiu添加了關於方法主體的信息。我想最主要的是我使用了體內for循環的索引。 – alh