我正在爲一個學校的java項目工作,你必須處理一個多線程程序。 我需要一個類,多線程之間共享,基本上是有管理的併發訪問值的矩陣,它看起來是這樣的:同步緩存矩陣
public class CacheMatrix{
private MyType[][] cachedItems;
public CacheMatrix(int size){
this.cachedItems = new MyType[size][size];
}
public MyType readItem(int x, int y){...}
public void storeItem(int x, int y, MyType item){...}
}
我正要使用的ReentrantReadWriteLock,一個對一個矩陣來管理它每個項目,但我意識到矩陣大小在10^3 X 10^3左右,所以我將有100萬鎖!
你認爲這是該走的路嗎? (是否可以創建如此多的鎖?)
您能否找到一種更好的方式來保留幾乎只有最小的互斥,但使用更少的鎖,因爲使用此類的線程數限制爲少量N(N範圍從2到8)?
感謝您的支持!
這是不壞的,所以在你的例子中,「mylockscount」的好價值可能是線程的數量? –
@Michele:基本上,是的 - 但是讓「concurrencylevel」成爲(預期的)線程數,因此您可以將「mylockscount」初始化爲「大小」或預期線程數 - 以較小者爲準。 –
@Michele:...和「somehashfunction」可能是一個簡單的「xor」,如果你不想過頭的話...... :-) –