Как получить доступ к объектам сервера из потоков

Я пишу небольшое многопоточное клиент-серверное Java-приложение. Когда сервер запускается, он создает некоторые объекты, такие как объект для подключения к БД, другой для управления пользователями и так далее. Мне нужно, чтобы они были доступны из каждого потока, который я запускаю. Как правильно это сделать? Передача объекта в каждый поток следующим образом:

public class Server{
      private ObjectType1 object1;
      private ObjectType2 object2;
      public void run{
            .......
            new ServerThread(object1,object2);
            .......
      }
}

или передача сервера каждому потоку:

public class Server{
      private TypeObject1 object1;
      private TypeObject2 object2;

      public TypeObject1 getObject1(){....}
      public TypeObject2 getObject2(){...}

      public void run(){
          .....
          new ServerThread(this);
          .....
      }
  }

а затем из объектов доступа к потоку таким образом?

server.getObject1();

person Alessandro    schedule 27.06.2015    source источник
comment
Рассмотреть возможность добавления ссылок на необходимые объекты в конструктор сервера? Или, возможно, используйте статические ссылки на объект1 и объект2.   -  person VILLAIN bryan    schedule 27.06.2015


Ответы (2)


Самый правильный способ сделать это - передать одну ссылку на каждый объект, чтобы соблюсти так называемый Закон Деметры: абстракция должна напрямую зависеть от других абстракций, а не от членов других абстракций.

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

Кстати: помните, что соединение JDBC не должно использоваться более чем одним потоком одновременно.

Привет.

person Little Santi    schedule 27.06.2015

Вы можете создать специальный класс для хранения ссылок на объекты, например ObjectHolder, куда вы можете поместить свои объекты object1 и object2.

Каждый поток может получить доступ к этому классу с помощью статического метода для получения объектов.

person davidluckystar    schedule 27.06.2015