Простейшим объяснением было бы выполнение Runnable
, мы можем назначить один и тот же объект нескольким потокам, и каждый Thread
разделяет одни и те же состояния объекта и поведение.
Например, предположим, что есть два потока, thread1 помещает целое число в массив, а thread2 берет целые числа из массива, когда массив заполняется. Обратите внимание, что для работы thread2 необходимо знать состояние массива, заполнил ли thread1 его или нет.
Реализация Runnable
позволяет вам иметь такую гибкость для совместного использования объекта, тогда как extends Thread
позволяет создавать новые объекты для каждого потока, поэтому любое обновление, которое выполняется потоком 1, теряется потоком 2.
Вы сможете скомпилировать свой код, добавив плагин gmaven в свой maven pom.xml. Он генерирует Java-заглушки вашего отличного кода, чтобы иметь дело с типом межъязыковых ссылок, с которым вы имеете дело. Я использую его довольно часто, и он очень хорошо работает.
Да, просто используйте GMaven . Поскольку это совместный компилятор, он автоматически переводит вашу java в groovy и groovy в зависимости java.
Вкратце, вам нужно:
gmaven-plugin
в ваш pom. xml
; src / main / groovy
или src / test / groovy
; Подробнее см. создание отличных проектов .
Вы можете разделить свой код на слои и сделать так, чтобы нижние уровни вызывали верхние уровни, но никогда не наоборот. Например, в веб-приложении у вас может быть уровень представления, уровень сервиса и уровень сохраняемости. Уровень представления вызывает уровень обслуживания, а уровень обслуживания вызывает уровень сохраняемости, но уровень сохраняемости никогда не будет вызывать уровень обслуживания или уровень представления. Если вы хотите, чтобы код groovy / java существовал на одном уровне, убедитесь, что один вызывает другой, но оба они не вызывают друг друга. Суть в том, что вам следует избегать двунаправленных зависимостей.