Параллельный доступ Singleton в Java - PullRequest
4 голосов
/ 29 июля 2011

У меня есть объект sinlgeton, который содержит один метод, ведь он НЕ синхронизирован. Доступ к синглтону может быть получен одновременно многими клиентами - что произойдет, если несколько клиентов получат доступ к этому объекту? Будет ли им предоставлена ​​ссылка на объект способом «первым пришел - первым обслужен» ... то есть, должен ли один клиент ждать, пока первый завершит объект, или ему будет дана та же ссылка на объект в памяти?

У меня странное чувство по поводу метода в синглтоне, который не синхронизирован. Если 2 клиента вызывают Singleton.method (param) с разными параметрами - они не будут создавать проблемы друг для друга, верно?

Ответы [ 2 ]

7 голосов
/ 29 июля 2011

Если ваш метод не использует общее состояние (например, одноэлементные поля), это абсолютно безопасно.Параметры метода передаются в стек потоков, который является локальным и исключительным для стека.

Подумайте о двух процессорах, выполняющих один и тот же код, но работающих в разных областях памяти.

3 голосов
/ 29 июля 2011

Синглтон означает, что должен быть только один экземпляр класса. Ну, это может быть не так, если синглтон не реализован должным образом. Самый безопасный способ иметь синглтон - это объявить его как enum.

Если есть метод, который не синхронизирован, это означает, что несколько потоков могут одновременно выполнять тело метода. Если синглтон неизменен, тогда не стоит беспокоиться. В противном случае вам следует обратить внимание на возможные несоответствия. Один поток может изменить состояние, в то время как другой делает то же самое, что приводит к непредсказуемому результату, который очень трудно отладить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...