javafx如何修复java。使用ReentrantLock和Condition的函数中的lang.IllegalMonitorStateException?
当线程共享同一个矩阵字段(platform[x][y]
)时,我对线程的同步有问题。我尝试使用ReentrantLock
和Condition
当我尝试调用函数时,同步代码会抛出:
Exception in thread "Thread-58" java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.signal(AbstractQueuedSynchronizer.java:1939)
功能是:
public boolean postaviVoziloNaZadatoMjestoNaPlatformi(Vozilo vozilo, int x, int y)
{
if(vozilo.isAlive())
{
if(platform[x][y]==null)
{
vozilo.setPozicijaX(x);
vozilo.setPozicijaY(y);
platform[x][y]=vozilo;
return true;
}
else if("SLOBODAN".equals(platform[x][y]))
{
Garage.brojSlobodnihMjestaPoPlatformi[vozilo.getBrojPlatforme()-1]--;
vozilo.setPozicijaX(x);
vozilo.setPozicijaY(y);
platform[x][y]=vozilo;
listaVozila.add(vozilo);
return true;
}
else if(vozilo instanceof JavnoVozilo)
{
vozilo.setPozicijaX(x);
vozilo.setPozicijaY(y);
return false;
}
else if(platform[x][y] instanceof Vozilo)
{
lock.lock();
try
{
while(postavljanje)
{
try {
cond.await();
} catch (InterruptedException ex) {
Logger.getLogger(Platforma.class.getName()).log(Level.WARNING, null, ex);
}
}
}
finally
{
lock.unlock();
}
postavljanje=true;
vozilo.setPozicijaX(x);
vozilo.setPozicijaY(y);
lock.lock();
try {
postavljanje=false;
cond.signal(); //this is line where is problem
} finally {
lock.unlock();
}
return true;
}
}
如何正确进行同步
共 (0) 个答案