Java提供了一個subList
函數來獲取指定索引之間的列表視圖,並且由父列表支持,意味着對subList
所做的任何更改都將反映在實際列表中。我想知道的是,如果線程嘗試訪問它們,這些子列表是否被父列表鎖定。作爲一個例子,如果我有一個包含100個元素的ArrayList
,並且我創建了4個子列表,每個子列表都有25個元素和4個線程嘗試在這些子列表上並行工作,他們是否會以真正並行的方式在它們的獨立子列表上工作或者將執行的第一個線程鎖定後臺數組列表?Java子列表內存分配
如果一個arraylist沒有默認鎖定,我假設線程將在子列表上並行運行,而不用等待對方,如果我以編程方式確保或確切地說邏輯本身確保這些線程從不在其他任何其他線程上工作比他們的子列表,那麼它將真正地平行處理子列表,對吧?
executor.addTask(new Thread(doneSignal, parentList.subList(subListStart, subListEnd)));
的原因,我想問的是,我試圖遍歷並行的子表,發現它比未創建4個線程和循環在實際父列表慢得多。
你的意思是什麼Java功能? – 2015-10-04 13:47:17
列表。subList(from,to) –
'ArrayList'根本不鎖定。這些線程如何在子列表上工作?他們是閱讀元素,還是設置元素,刪除元素? –