Чи є весняні однотонних бобів надійними?

Я хочу дізнатись, чи є пшеничні пшениці "різьбою" безпечною, якщо так, то чому, якщо ні, то чому?

Оскільки я починаю з весни, то допомога буде вдячна.

18
Весна не гарантує безпеку нитки. Це буде ваша відповідальність. Весна створить Singleton, але якщо вона змінюється, то вона може не бути надійною.
додано Автор NINCOMPOOP, джерело
@ AndreiPodoprіgora Звичайно, ні - це залежить від того, який саме боб фактично робить .
додано Автор Dave Newton, джерело
@ AndreiPodoprіgora Це "синглтон" частина. Незалежно від того, чи є код синглтона надійним для потоку, це зовсім окрема проблема. Існує одномандатна створення , і існує одиночна виконання : дві різні речі.
додано Автор Dave Newton, джерело
@ AndreiPodoprіgora Тоді я думаю, що ваше запитання є оманливим, оскільки "гарантоване створення єдиного екземпляра" недостатньо для забезпечення безпеки потоку.
додано Автор Dave Newton, джерело
Тема безпеки не має нічого спільного з Singletons. Чиста синглтона чи Весна не має значення.
додано Автор Ravi Thapliyal, джерело
Чи не гарантується створення лише одного екземпляра в багатопотоковій середовищі безпеки потоків?
додано Автор StKiller, джерело
@DaveNewton - якщо розробник не піклується про безпеку потоку та не називає правильним синтаксичний синтаксис - створюються багато екземплярів - так що синглтон не безпечний для потоків.
додано Автор StKiller, джерело
@DaveNewton, так, я згоден. Ось що я казав - процес створення singleton також пов'язаний з безпекою потоку.
додано Автор StKiller, джерело

7 Відповіді

Ні. Ці два поняття навіть не пов'язані.

Singletons стосуються створення . Цей дизайн-схема гарантує, що буде створено лише один екземпляр класу.

Захист потоку стосується виконання . Цитувати Вікіпедія :

Шматок коду є надійним для потоку, якщо він лише маніпулює спільними структурами даних таким чином, що гарантує безпечне виконання декількома потоками одночасно.

Тому в кінцевому підсумку безпека потоку залежить тільки від коду та коду. І це є причиною того, що навесні боби не є надійними сама по собі.

22
додано
@ScottShipp І ви думаєте, що це збіг, що воно називається singleton scope? Пружина створює компонент, якщо він не існує, і забезпечує існуючу інстанцію. Це звучить знайомо?
додано Автор zeroflagL, джерело
Я розумію, що це старе, але оскільки це був один з перших результатів Google, я підійшов до пошуків з безпекою весняних ниток, хотів би зазначити, що весняні "однотонкі боби" відрізняються від "єдиного" дизайну, що відповідає даній відповіді . . . "Весняний однотонний квасоля" дійсно означає "Спрінг" з одномандатним об'ємом.
додано Автор Scott Shipp, джерело
Будь ласка, зверніться до Навесні документація на одиночній смузі :" Спрямованість концепції однотонного боба відрізняється від шаблону Сінглета, як це визначено в книзі шаблонів Gang of Four (GoF). GoF Singleton жорстко кодує об'єкт об'єкта таким чином, щоб Для ClassLoader створюється один і єдиний екземпляр певного класу. Обсяг одного з варіантів Spring є найкращим для контейнера та для кожного компонента. "
додано Автор Scott Shipp, джерело

Весна просто управляє життєвим циклом singleton bean і підтримує єдиний екземпляр об'єкта. Техніка безпеки не має нічого спільного з нею.

якщо ні, то чому?

Оскільки синглтон і безпека нитки є двома різними поняттями. Ви можете піти на безпеку потоків з синхронізованим ключовим словом

3
додано
або, зробивши вашу безвісні особу Spring Bean, що, на мою думку, є кращим підходом.
додано Автор DaveH, джерело

Одношарові боби, що живуть у воді, не є надійними, оскільки Springs вказує їх. Вибачте

3
додано

У мене різне сприйняття: Весняні однобійні боби створюються один раз, і в будь-який момент часу доступний лише один екземпляр.

Скажемо, що у вас є змінна екземпляра, яка модифікується в не синхронізованому методі. У багатопотоковій середовищі екземпляр того ж класу буде призначений для всіх потоків, а 2 одночасні потоки можуть оновити/змінювати змінні екземпляра, які можуть призвести до несподіваної ситуації. Сингольтон бобів не забезпечує безпеку потоку, і тепер ви знаєте, що використання змінних екземплярів може призвести до несподіваного результату, у вас є 2 варіанти вирішення однакових:

  1. Не використовуйте змінні екземпляра у багатопоточному середовищі. АБО
  2. Використовуйте синхронізований блок/ключове слово на методах, де змінені екземпляри змінюються, щоб уникнути непередбачених результатів.
1
додано

якщо ні, то чому?

тому що ви можете мати посилання на об'єкти, що не мають ніяких проблем, у вашому одиночному рядку.

Але якщо ви цього не зробите, і ви використовуєте джерело для введення будь-яких змінних екземпляра, то так, вони безпечні.

0
додано

Весна не гарантує безпеку нитки. Це буде ваша відповідальність. Весна створить Singleton, але якщо вона змінюється, то вона може не бути надійною. IT-програміст зобов'язаний подбати про клас навесні, таким чином він повинен бути безпечним.

0
додано

Навесні однобітні боби не матимуть жодної держави (бездержавного). Стовп Singleton Bean забезпечує єдиний екземпляр на BeanFactory. Таким чином, в умовах багатопотокового середовища це не забезпечить єдиний екземпляр навіть з одиночними смугами.

Щоб вирішити цю проблему, нам потрібно змінити діапазон ширини діапазону від singleton до області прототипу , тому що це відповідальність розробників для забезпечення безпеки потоку.

0
додано
Базуючись на вашому твердженні, як точно це безпечно, просто змінюючи область до прототипу ? Область бобів не має нічого спільного з безпекою ниток.
додано Автор Eddie B, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників