我有一個1000 * 1000的表和一些線程在它上面工作。每個線程獨立工作在表格的某個部分上,每次迭代時他們的「工作」都會在表格上移動。java中的多線程訪問
而不是鎖定整個表的線程,而其他人正在等待,我想只鎖定每個線程所需的單元格。 所以我正在尋找鎖定每個線程所需的單元「塊」。
我的想法是創建一個鎖表,如:Lock [][]gridLock=new Lock[1000][1000];
並鎖定每個線程所需的單元格。
這將配合gridlock(x,y,diameter)
和gridUnlock(x,y,diameter)
方法來鎖定/解除所需單元的時鐘。
有沒有更好的方法來實現這個或者這個方法是否合適?
當然這是可能的,但你應該更清楚地說明你的線程正在做什麼 - 爲什麼不讓每個線程都在表的一行上操作,就是這樣,根本就不需要任何鎖定。 – luk2302
一百萬個鎖可能會變得非常麻煩。 – Kayaman
太寬泛。詳細闡述訪問模式,訪問成本以及「表格」具有哪種數據結構。你的文字建議*數組*或*網格*,而不是表格。同樣非常重要的是確定訪問類型(讀/寫)。你的100萬鎖定方法很可能會非常可怕,以至於單線程會更快。更不用說它巨大的僵局潛力。通過選擇更合適的數據結構,鎖定可能大都可以避免。 TL; DR:棚子裏有很多工具,但不知道問題沒有好的選擇。 – Durandal