У меня проблемы с просыпанием нитей.Не могу разбудить темы
В моей программе должен быть движущийся нить под названием «Автобус» и несколько альпинистов, которые пытаются войти в автобус, чтобы отправиться куда-то еще.
Автобус должен всегда находиться в движении (за исключением случаев, когда альпинисты должны входить/выходить), и альпинисты должны увидеть, находится ли автобус в нужном месте, чтобы они могли попасть/выехать.
Так что я сделал этот код, но я не могу заставить его работать, кажется, что автобус не может разбудить темы, но я не могу придумать другое решение, и я не знаю, что случилось ,
¿Как я могу сигнализировать, чтобы альпинисты просыпались и садились в автобус?
public class Bus extends Thread
{
boolean pointA=true, pointB=false;
public Bus() {
start();
}
@Override
public void run()
{
while(true)
{
waiting();
goA();
waiting();
goB();
}
}
public synchronized void waiting() {
try {
Thread.sleep((int)(1000)); //waiting for the climbers
} catch (InterruptedException ex) {}
}
public synchronized void goB() {
pointA = false;
try {
Thread.sleep((int)(1000)); //travelling
} catch (InterruptedException ex) {}
pointB = true;
notifyAll(); //is in B, the climbers can get out
}
public synchronized void goA() {
pointB = false;
try {
Thread.sleep((int)(1000));
} catch (InterruptedException ex) {}
pointA = true;
notifyAll(); //is in A, the climbers can get in
}
public synchronized void enter(Climber c, ArrayThreads fA, ArrayThreads fBus){
while(!pointA){ //wait until Bus reaches pointA
try{wait();}catch(InterruptedException e){}
}
fA.out(c); //Leaves station
fBus.put(c); //Enters the bus
while(!pointB){ //wait until Bus reaches pointB
try{wait();}catch(InterruptedException e){}
}
fBus.out(c); //Leaves Bus
}
}
Вашего класса имеет ошибку компиляции: 'общественного синхронизированы недействительное ожидание()' «Не может переопределить окончательный метод из Object ». Перед тем, как задать вопрос, отправьте рабочий код. –
какой? я не добавлял импорт, ни основной класс, ни класс альпиниста, может быть, это. Код работает для меня, но проблема в том, что альпинисты все время ждут. – Anarion321
Даже если вы добавляете правильный импорт и класс Climber, вы все равно не можете переопределить метод 'wait()', поскольку он объявлен окончательным в 'Object'. Какую версию JDK вы используете? –