我身邊有表4人,他們每個人之間是一個工具。他們是4個獨立的線程,他們的運行方法告訴他們選擇右側和左側的工具並進行吃飯,然後將兩個工具放回桌子,以便其他人也可以進食並再次完成所有工作。雖然結束,即使條件未填充的Java多線程
這裏是while循環,迫使他們每個人挑選的工具。這是在他們的班級,我從run方法調用它。
public void sbirejHulky() throws InterruptedException
{
while((left != true) && (right != true))
{
right = rightTool.getTool(this); // try to grab right tool
aktualizuj(); // This actualise the graphic
Thread.sleep(Filozofove.getRandom());
left = leftTool.getTool(this); // try to grab left tool
Thread.sleep(Filozofove.getRandom());
aktualizuj();
System.out.println("this.right +" "+this.left);
}
}
爲左,右兩個都是假的權利,而這應該運行長,?但有時它會在左邊是真的時結束,但正確的依然是錯誤的,我不明白它有多可能。
方法getTool是同步的,如果,如果有人有它在這一刻工具抓鬥是成功的,並返回false返回true。
我會很高興的任何幫助
編輯
public synchronized boolean getTool(Filozof filozof) throws InterruptedException
{
if (owner != null)
{
if(filozof.isRight())
{
filozof.setRight(filozof.getRightTool().putToolBack());
}
if(filozof.isLeft())
{
filozof.setLeft(filozof.getLeftTool().putToolBack());
}
return false;
}
else
{
owner = filozof;
return true;
}
}
該代碼甚至不編譯! – Andreas
*「但是,有時它會在左邊是真的時結束,但是右邊仍然是錯誤的......」*對。 '&&'表示「AND」。這意味着循環只在**兩個條件都成立的情況下才會繼續(「A和B ......」)。 –
注意事項:使用'var == true'(或'false')或'var!= true'(或'false')與布爾類是很差的做法;你**已經**有一個布爾值。只需使用變量本身('var')而不是'var == true'或'var!= false',並使用'!var'而不是'var!= true'或'var == false'。 –