同步我採取的是計算Julia集的程序。它將使用多個線程,具體取決於可用的處理器數量。每個線程計算一條線,但只有當該線不被另一個線程計算時。這部分工作得很好。多線程安全在Java
但有時,當我測試它與更大的圖像(更多的線來計算,例如而不是getHeight() = 1200
,我把它設置爲3000
,有一些行被跳過)。我想讓它更安全,這樣不會有兩行計算,也不會跳過任何行。這裏是run()
方法的代碼:我希望它這樣的工作
public void run() {
while (counter < getHeight()-1) {
synchronized(this) {
if (counter >= getHeight() -1) { //so that the last line will not be calculated >2 times.
return;
}
counter++;
image.setRGB(0, counter, getWidth(), 1, renderLine(counter), 0, 0);
}
}
}
:如果所計算的當前行,線程便進入到下一行..不,它感到困惑,使線得到跳過..
我想這其實:
public void run() {
while (counter < getHeight()-1 && !working) {
synchronized(this) {
working = true;
if (counter >= getHeight() -1) { //so that the last line will not be calculated >2 times.
return;
}
counter++;
image.setRGB(0, counter, getWidth(), 1, renderLine(counter), 0, 0);
working = false;
}
}
}
,但是,我不知道這是否會阻止訪問到另一個線程當某個線程已經工作,它將改變值「counter」,這意味着行可以跳過!
我需要一個布爾變量來通知線程實際工作的一條線嗎?有什麼建議?
的方法
run
u可以有一個數組表示已經獲得的線的數量。但如果線數增加,肯定會使應用程序變慢。 – Asif