2014-01-14 2 views
0

При реализации решений двух проблем (конечного автомата и генетического программирования) я сталкиваюсь с одной и той же проблемой, которая действительно позволяет отменить выполнение метода. Принимая конечный автомат в качестве примера, у меня естьJava: борьба с управлением по вызову метода

public class FiniteStateMachine { 

    public class runState(State state) { 
     state.run(); 
    } 

    } 

Я не имею контроль над State, все, что я могу сделать, это вызвать метод run. Иногда state может быть плохо себя вести, например, они могут занимать слишком много времени или слишком много байткодов. Я хочу остановить их, т. Е. Отменить прогон. Как я могу это сделать, не имея возможности изменить State, только FiniteStateMachine и с одним потоковым кодом.

+0

Взгляните на [Будущее] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html). Но для этого потребуется несколько потоков. –

+3

Невозможно сделать это без использования нескольких потоков. – Ralf

+0

@ElliottFrisch: Это не поможет. – SLaks

ответ

2

У меня нет контроля над состоянием, все, что я могу сделать, это вызвать его метод запуска. Как я могу сделать это, не имея возможности изменить состояние, только FiniteStateMachine и с одним потоковым кодом.

К сожалению, невозможно в соответствии с требованиями языка. Это будет возможно только с многопоточными подходами.

Если вы можете изменить состояние, вы можете сделать это однопоточным, но если State является черным ящиком, вы действительно застряли. Просто нет.

Смежные вопросы