Да, Наследование. Иметь базовый класс с методом set. Сделайте метод set виртуальным и переопределите его в классах Tile Primitive и Cube. Затем Simple вызовите его следующим образом:
void monster(BaseClass tile, int a, int b, int c)
{
tile.set(a,b,c)
}
Эта функция примет любой класс, унаследованный от BaseClass, и вызовет его перезаписанный метод соответственно.
Кроме необходимости получить монитор прежде, чем ожидать () нет никакого существенного различия больше, пока никто внешний не собирается быть .notify () луг.
В древнем коде Java Вы видели бы, что люди использовать ожидают () вместо Thread.sleep (), потому что Thread.sleep () заморозил бы целое приложение в системах без вытесняющей многозадачности (я смотрю на Вас OS9). Технически ожидайте () также, позвольте нам, Вы используете наноразрешение, ожидает, но на практике они редко настолько точны.
Обратите внимание, что существует одно основное отличие в использовании Object.wait () и Thread.sleep () в блоке синхронизации: Thread.sleep () не выпускает заблокированный монитор, таким образом, никто еще не может стать владельцем монитора.
Кроме того, Object.wait () не гарантирует, что обозначенной задержке повинуются строго. В первую очередь, после передач задержки, поток может все еще ожидать другого потока, который стал владельцем монитора тем временем; и это может конкурировать с другими потоками, ожидающими для захвата монитора.
Во-вторых, мифическое побочное пробуждение, как это описано в Java 6 API javadoc:
Поток может также проснуться без того, чтобы быть уведомленным, прерванный, или таймаут, так называемое побочное пробуждение.
Вряд ли, как это, каждая часть кода с помощью Object.wait () должна принять его во внимание.
Вы говорите, что это - очевидно невоспитанность для использования, ожидают/уведомляют этого, но я не вижу ничто плохого с ним. По общему признанию развивая его с a sleep
вызов очень нечетен (и глотающие исключения плохо), но я определенно использовал Object.wait
как "вскрываемый сон" до настоящего времени.
Предположите, что у Вас есть поток, опрашивающий ресурс каждую минуту, но Вы хотите быть разбуженными, если что-то произошло (например, местоположение ресурса изменилось, или частота таймера изменилась, или программа хочет выйти корректным способом). Используя wait/notify
работы чрезвычайно хорошо для того - это - определенно инструмент для очистки, чем вызов interrupt
на потоке откуда-либо, поскольку не имеет значения, если уведомление происходит, в то время как Вы на самом деле обрабатываете вместо ожидания.