我需要創建一個方法,將參數作爲maxValue
。並從0循環,但一旦它使用一個索引,它不能再使用它。以獨特的方式遍歷列表或其他內容
說明:
讓我們舉一個例子,maxValue
是2000年。現在,應該從0到2000,但開始索引不斷被其他線程改變。像它可以再次爲0或者它可以是1900或1999,可以是小於maxValue
的任何數字。所以它應該從開始索引到結束循環,然後循環其餘的項目。
這是我曾嘗試:
public int i = 0; //keep changes by other thread
public void DoStuff(int maxValue) {
HashSet<Integer> valuesSet = new HashSet<Integer>();
// fill hashset
for (int a = 0; a < maxValue; a++)
valuesSet.add(a);
for (; i < maxValue; i++) {
if (valuesSet.contains(i)) {
valuesSet.remove(i);
// SomeMethod(i);
}
if (valuesSet.isEmpty())// must check isEmpty first
break;
if (i == (maxValue - 1)) // reset i to 0 to use remaining items in hashset
i = 0;
}
}
我沒有測試代碼,但我可以看到這個問題會來,如果其他線程設置保留我爲0或一些比maxValue
這個循環值少將走向無限。雖然它應該是更好的東西。任何想法的傢伙?
編輯:
深例
i=0
和maxValue=2000
DoStuff被調用,當i
達到100環通,i
得到了由其它線程設置爲1600,環是繼續前進,但再次i
得到設定到30相同的其他線程,然後一次又一次它被其他線程設置,直到valuesSet
中的所有項目被調用SomeMethod(i)
。但問題是,如果像1998年或1999年等valuesSet
中的1個或多個項目保持設置爲0或10或100那樣更低,則循環具有很低的中斷或完成概率。
我要的是,如果一旦一個數字(0至包括maxValue)被調用的SomeMethod
,決不能再次調用,而起始編號保存更改並SomeMethod
必須呼籲所有的號碼,直到包括maxValue。如果SomeMethod
被調用到maxValue並仍然有數字,它應該以最小的數字重新開始。
除了被線程設置之外''我是否在'DoStuff'方法之外使用? –
'我'會在DoStuff之外,可以在任何地方,但在外面。 – xmen
你肯定在正確的軌道上使用'valueSet'來記錄你已經傳遞給'SomeMethod'的參數。我不認爲你已經將其餘的要求解釋爲我理解他們的地步。 –