рдЬрд╛рд╡рд╛ рдореЗрдорд░реА рдореЙрдбреЗрд▓рдЪрд╛ рдкрд░рд┐рдЪрдп
Java рдореЗрдорд░реА рдореЙрдбреЗрд▓ (JMM) Java рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдгрд╛рддреАрд▓ рдереНрд░реЗрдбреНрд╕рдЪреНрдпрд╛ рд╡рд░реНрддрдирд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ. рдореЗрдорд░реА рдореЙрдбреЗрд▓ рд╣реЗ рдЬрд╛рд╡рд╛ рднрд╛рд╖реЗрдЪреНрдпрд╛ рд╢рдмреНрджрд╛рд░реНрдерд╛рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ рдЖрдгрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ Java рдорд╢реАрдирд╕рд╛рдареА рдирд╡реНрд╣реЗ рддрд░ рд╕рдВрдкреВрд░реНрдг Java рд╕рд╛рдареА рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛рдп рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рдХрд╛рдп рдХрд░реВ рдирдпреЗ рдпрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ.
1995 рдордзреНрдпреЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓реЗ рдореВрд│ рдЬрд╛рд╡рд╛ рдореЗрдорд░реА рдореЙрдбреЗрд▓ (рдЬреЗ рд╡рд┐рд╢реЗрд╖рддрдГ "рдкрд░реНрдХреЛрд▓реЛрдХрд▓ рдореЗрдорд░реА" рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ), рддреЗ рдЕрдпрд╢рд╕реНрд╡реА рдорд╛рдирд▓реЗ рдЬрд╛рддреЗ: рдХреЛрдб рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдЪреА рд╣рдореА рди рдЧрдорд╛рд╡рддрд╛ рдЕрдиреЗрдХ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реАрдд. рд╡рд┐рд╢реЗрд╖рддрдГ, рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб "рд╕рд┐рдВрдЧрд▓" рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд:
- рдПрдХрддрд░ рд╕рд┐рдВрдЧрд▓рдЯрди рдНрдХреНрд╕реЗрд╕ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреГрддреАрдореБрд│реЗ (рдЬрд░реА рд╡рд╕реНрддреВ рдлрд╛рд░ рдкреВрд░реНрд╡реА рддрдпрд╛рд░ рдХреЗрд▓реА рдЧреЗрд▓реА рд╣реЛрддреА, рдЖрдгрд┐ рдХрд╛рд╣реАрд╣реА рдмрджрд▓реВ рд╢рдХрдд рдирд╛рд╣реА) рдЗрдВрдЯрд░-рдереНрд░реЗрдб рд▓реЙрдХ рд╣реЛрдК рд╢рдХрддреЗ;
- рдХрд┐рдВрд╡рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдЕрдкреВрд░реНрдг рдПрдХрдЯрд╛ рдЬрд╛рд░реА рдХрд░реЗрд▓;
- рдХрд┐рдВрд╡рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рд╕рд┐рд╕реНрдЯрдо рджреЛрди рдПрдХрдЯреЗ рддрдпрд╛рд░ рдХрд░реЗрд▓;
- рдХрд┐рдВрд╡рд╛ рдбрд┐рдЭрд╛рдЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╢реАрдирдЪреНрдпрд╛ рд╡рд░реНрддрдирд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕реЗрд▓.
рдореНрд╣рдгреВрди, рдореЗрдорд░реА рдпрдВрддреНрд░рдгрд╛ рдкреБрдиреНрд╣рд╛ рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ. 2005 рдордзреНрдпреЗ, Java 5 рдЪреНрдпрд╛ рд░рд┐рд▓реАрдЭрд╕рд╣, рдПрдХ рдирд╡реАрди рджреГрд╖реНрдЯреАрдХреЛрди рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛, рдЬреЛ Java 14 рдЪреНрдпрд╛ рд░рд┐рд▓реАрдЭрд╕рд╣ рдЖрдгрдЦреА рд╕реБрдзрд╛рд░рд▓рд╛ рдЧреЗрд▓рд╛.
рдирд╡реАрди рдореЙрдбреЗрд▓ рддреАрди рдирд┐рдпрдорд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ:
рдирд┐рдпрдо #1 : рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдб рдХреЗрд▓реЗрд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдпреВрдбреЛ-рдЕрдиреБрдХреНрд░рдорд╛рдиреЗ рдЪрд╛рд▓рддрд╛рдд. рдпрд╛рдЪрд╛ рдЕрд░реНрде: рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд░рддреНрдпреЗрдХ рдШрдбреНрдпрд╛рд│рд╛рдд рдЕрдиреЗрдХ рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░реВ рд╢рдХрддреЛ, рддреНрдпрд╛рдЪ рд╡реЗрд│реА рддреНрдпрд╛рдВрдЪрд╛ рдХреНрд░рдо рдмрджрд▓рддреЛ, рддрдерд╛рдкрд┐, рд╕рд░реНрд╡ рдбреЗрдЯрд╛ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рд░рд╛рд╣рддрд╛рдд, рдореНрд╣рдгреВрди рд╡рд░реНрддрди рдЕрдиреБрдХреНрд░рдорд┐рдХрд╛рдВрдкреЗрдХреНрд╖рд╛ рднрд┐рдиреНрди рдирд╕рддреЗ.
рдирд┐рдпрдо рдХреНрд░рдорд╛рдВрдХ 2 : рдХреБрдареЗрд╣реА рдмрд╛рд╣реЗрд░рдЪреА рдореВрд▓реНрдпреЗ рдирд╛рд╣реАрдд. рдХреЛрдгрддреЗрд╣реА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡рд╛рдЪрдгреЗ (рдиреЙрди-рд╡реНрд╣реЛрд▓реЕрдЯрд╛рдЗрд▓ рд▓рд╛рдБрдЧ рдЖрдгрд┐ рдбрдмрд▓ рд╡рдЧрд│рддрд╛, рдЬреНрдпрд╛рд╕рд╛рдареА рд╣рд╛ рдирд┐рдпрдо рдЕрд╕реВ рд╢рдХрдд рдирд╛рд╣реА) рдПрдХрддрд░ рдбреАрдлреЙрд▓реНрдЯ рдореВрд▓реНрдп (рд╢реВрдиреНрдп) рдХрд┐рдВрд╡рд╛ рджреБрд╕рд░реНтАНрдпрд╛ рдХрдорд╛рдВрдбрджреНрд╡рд╛рд░реЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдХрд╛рд╣реАрддрд░реА рдкрд░рдд рдХрд░реЗрд▓.
рдЖрдгрд┐ рдирд┐рдпрдо рдХреНрд░рдорд╛рдВрдХ 3 : рдЙрд░реНрд╡рд░рд┐рдд рдШрдЯрдирд╛ рдХреНрд░рдорд╛рдиреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд, рдЬрд░ рддреЗ рдХрдареЛрд░ рдЖрдВрд╢рд┐рдХ рдСрд░реНрдбрд░ рд╕рдВрдмрдВрдзрд╛рдиреЗ рдЬреЛрдбрд▓реЗрд▓реЗ рдЕрд╕рддреАрд▓ рддрд░ "рдкреВрд░реНрд╡реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ" ( рдЖрдзреА рдШрдбрддреЗ ).
рдЖрдзреА рдШрдбрддреЗ
рд▓реЗрд╕реНрд▓реА рд▓реЕрдореНрдкрдкреЛрд░реНрдЯ рдпрд╛рдВрдиреА рдпрд╛рдкреВрд░реНрд╡реА рд╣реЕрдкреЗрдиреНрд╕ рд╣реА рд╕рдВрдХрд▓реНрдкрдирд╛ рдорд╛рдВрдбрд▓реА рд╣реЛрддреА . рд╣рд╛ рдЕрдгреБ рдЖрджреЗрд╢ (++ рдЖрдгрд┐ -- рдЕрдгреВ рдирд╕рд▓реЗрд▓реНрдпрд╛) рджрд░рдореНрдпрд╛рди рд╕рд╛рджрд░ рдХреЗрд▓реЗрд▓рд╛ рдПрдХ рдХрдареЛрд░ рдЖрдВрд╢рд┐рдХ рдХреНрд░рдо рд╕рдВрдмрдВрдз рдЖрд╣реЗ рдЖрдгрд┐ рдпрд╛рдЪрд╛ рдЕрд░реНрде "рд╢рд╛рд░реАрд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рдЖрдзреА" рдирд╛рд╣реА.
рддреНрдпрд╛рдд рдореНрд╣рдЯрд▓реЗ рдЖрд╣реЗ рдХреА рджреБрд╕рд▒реНрдпрд╛ рд╕рдВрдШрд╛рд▓рд╛ рдкрд╣рд┐рд▓реНрдпрд╛рдиреЗ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрджрд▓рд╛рдВрдЪреА "рдорд╛рд╣рд┐рддреА" рдЕрд╕реЗрд▓.

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЕрд╢рд╛ рдСрдкрд░реЗрд╢рдиреНрд╕рд╕рд╛рдареА рдПрдХ рджреБрд╕рд▒реНрдпрд╛рдЪреНрдпрд╛ рдЖрдзреА рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓рд╛ рдЬрд╛рддреЛ:
рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рдЖрдгрд┐ рдореЙрдирд┐рдЯрд░реНрд╕:
- рдореЙрдирд┐рдЯрд░ рдХреЕрдкреНрдЪрд░ рдХрд░рдгреЗ ( рд▓реЙрдХ рдкрджреНрдзрдд , рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реЗ рдкреНрд░рд╛рд░рдВрдн) рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░ рддреНрдпрд╛рдЪ рдереНрд░реЗрдбрд╡рд░ рдЬреЗ рдХрд╛рд╣реА рд╣реЛрддреЗ рддреЗ.
- рдореЙрдирд┐рдЯрд░рдЪреЗ рдкрд░рдд рдпреЗрдгреЗ (рдкрджреНрдзрдд рдЕрдирд▓реЙрдХ , рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭрдЪрд╛ рд╢реЗрд╡рдЯ) рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдЖрдзреА рд╕рдорд╛рди рдереНрд░реЗрдбрд╡рд░ рдЬреЗ рдХрд╛рд╣реА рдШрдбрддреЗ.
- рдореЙрдирд┐рдЯрд░ рдкрд░рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдирдВрддрд░ рддреЗ рджреБрд╕рд░реНрдпрд╛ рдереНрд░реЗрдбрджреНрд╡рд╛рд░реЗ рдХреЕрдкреНрдЪрд░ рдХрд░рдгреЗ.
рд▓реЗрдЦрди рдЖрдгрд┐ рд╡рд╛рдЪрди:
- рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд╡рд░ рд▓рд┐рд╣рд┐рдгреЗ рдЖрдгрд┐ рдирдВрддрд░ рддреНрдпрд╛рдЪ рдкреНрд░рд╡рд╛рд╣рд╛рдд рддреЗ рд╡рд╛рдЪрдгреЗ.
- volatile variable рд╡рд░ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЖрдзреА рд╕рд░реНрд╡ рдХрд╛рд╣реА рдПрдХрд╛рдЪ рдзрд╛рдЧреНрдпрд╛рдд рдЖрдгрд┐ рд╕реНрд╡рддрдГрдЪ рд▓реЗрдЦрди. рдЕрд╕реНрдерд┐рд░ рд╡рд╛рдЪрди рдЖрдгрд┐ рддреНрдпрд╛ рдирдВрддрд░ рддреНрдпрд╛рдЪ рдзрд╛рдЧреНрдпрд╛рд╡рд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА.
- рдЕрд╕реНрдерд┐рд░ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд╡рд░ рд▓рд┐рд╣рд┐рдгреЗ рдЖрдгрд┐ рдирдВрддрд░ рддреЗ рдкреБрдиреНрд╣рд╛ рд╡рд╛рдЪрдгреЗ. рдЕрд╕реНрдерд┐рд░ рд▓реЗрдЦрди рдореЙрдирд┐рдЯрд░ рд░рд┐рдЯрд░реНрди рдкреНрд░рдорд╛рдгреЗрдЪ рдореЗрдорд░реАрд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддреЗ, рддрд░ рд╡рд╛рдЪрди рд╣реЗ рдХреЕрдкреНрдЪрд░рд╕рд╛рд░рдЦреЗ рдЕрд╕рддреЗ. рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдЬрд░ рдПрдХрд╛ рдереНрд░реЗрдбрдиреЗ рдЕрд╕реНрдерд┐рд░ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд▓рд╛ рд▓рд┐рд╣рд┐рд▓реЗ рдЖрдгрд┐ рджреБрд╕рд░реНтАНрдпрд╛рд▓рд╛ рддреЗ рд╕рд╛рдкрдбрд▓реЗ, рддрд░ рд▓реЗрдЦрдирд╛рдЪреНрдпрд╛ рдЖрдзреАрдЪреА рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯ рд╡рд╛рдЪрд▓реНрдпрд╛рдирдВрддрд░ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрдкреВрд░реНрд╡реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ; рдЪрд┐рддреНрд░ рдкрд╣рд╛.
рд╡рд╕реНрддреВрдВрдЪреА рджреЗрдЦрднрд╛рд▓:
- рд╕реНрдЯреЕрдЯрд┐рдХ рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рдЖрдгрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╣ рдХреЛрдгрддреАрд╣реА рдХреНрд░рд┐рдпрд╛.
- рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдордзреАрд▓ рдЕрдВрддрд┐рдо рдлреАрд▓реНрдб рдЖрдгрд┐ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдирдВрддрд░ рд╕рд░реНрд╡рдХрд╛рд╣реА рд▓рд┐рд╣рд┐рдгреЗ. рдЕрдкрд╡рд╛рдж рдореНтАНрд╣рдгреВрди, рдШрдбрддреЗ-рдкреВрд░реНрд╡реАрдЪреЗ рд╕рдВрдмрдВрдз рдЗрддрд░ рдирд┐рдпрдорд╛рдВрд╢реА рд╕рдВрдХреНрд░рд╛рдордХрдкрдгреЗ рдЬреЛрдбрдд рдирд╛рд╣реАрдд рдЖрдгрд┐ рддреНрдпрд╛рдореБрд│реЗ рдЖрдВрддрд░-рдереНрд░реЗрдб рд╢рд░реНрдпрдд рд╣реЛрдК рд╢рдХрддреЗ.
- рдСрдмреНрдЬреЗрдХреНрдЯрд╕рд╣ рдХреЛрдгрддреЗрд╣реА рдХрд╛рд░реНрдп рдХрд░рд╛ рдЖрдгрд┐ рдЕрдВрддрд┐рдо рдХрд░рд╛() .
рдкреНрд░рд╡рд╛рд╣ рд╕реЗрд╡рд╛:
- рдереНрд░реЗрдб рдЖрдгрд┐ рдереНрд░реЗрдбрдордзреАрд▓ рдХреЛрдгрддрд╛рд╣реА рдХреЛрдб рд╕реБрд░реВ рдХрд░рдд рдЖрд╣реЗ.
- рдереНрд░реЗрдб рдЖрдгрд┐ рдереНрд░реЗрдбрдордзреАрд▓ рдХреЛрдгрддреНрдпрд╛рд╣реА рдХреЛрдбрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╢реВрдиреНрдп рдХрд░рдгреЗ.
- рдереНрд░реЗрдбрдордзреАрд▓ рдХреЛрдб рдЖрдгрд┐ join() ; рдереНрд░реЗрдбрдордзреАрд▓ рдХреЛрдб рдЖрдгрд┐ isAlive() == false .
- interrupt() рдереНрд░реЗрдб рдЖрдгрд┐ рддреЛ рдерд╛рдВрдмрд▓рд╛ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдЖрдврд│рд▓реЗ.
рдХрд╛рдорд╛рдЪреНрдпрд╛ рдмрд╛рд░рдХрд╛рд╡реЗ рдЖрдзреА рдШрдбрддреЗ
рдПрдХрдЪ рдореЙрдирд┐рдЯрд░ рдорд┐рд│рд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдШрдбрддреЗ-рдЖрдзреА рдореЙрдирд┐рдЯрд░ рд░рд┐рд▓реАрдЭ рдХрд░рдгреЗ. рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рддреЗ рд░рд┐рд▓реАрдЭ рдЖрд╣реЗ, рдмрд╛рд╣реЗрд░ рдкрдбрдгреЗ рдирд╛рд╣реА, рдореНрд╣рдгрдЬреЗрдЪ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡рд╛рдкрд░рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдмрджреНрджрд▓ рдХрд╛рд│рдЬреА рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.
рд╣реЗ рдЬреНрдЮрд╛рди рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрдкрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕ рдХрд╢реА рдорджрдд рдХрд░реЗрд▓ рддреЗ рдкрд╛рд╣реВ рдпрд╛. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рд╕рд░реНрд╡рдХрд╛рд╣реА рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ: рдлрдХреНрдд рдмрд╛рд╣реНрдп рдЪреЗрдХ рдХрд╛рдврд╛ рдЖрдгрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рдЬрд╕реЗ рдЖрд╣реЗ рддрд╕реЗ рд╕реЛрдбрд╛. рдЖрддрд╛ рджреБрд╕рд░рд╛ рдереНрд░реЗрдб рд╕рд░реНрд╡ рдмрджрд▓ рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рд╣рдореА рджреЗрддреЛ, рдХрд╛рд░рдг рдЗрддрд░ рдереНрд░реЗрдбрдиреЗ рддреЛ рд░рд┐рд▓реАрдЬ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░рдЪ рддреНрдпрд╛рд▓рд╛ рдореЙрдирд┐рдЯрд░ рдорд┐рд│реЗрд▓. рдЖрдгрд┐ рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕реБрд░реВ рд╣реЛрдИрдкрд░реНрдпрдВрдд рддреЛ рддреЗ рд╕реЛрдбрдгрд╛рд░ рдирд╛рд╣реА, рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдмрджрд▓ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдкрд╛рд╣реВ, рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдирд╛рд╣реА:
public class Keeper {
private Data data = null;
public Data getData() {
synchronized(this) {
if(data == null) {
data = new Data();
}
}
return data;
}
}
рдЕрд╕реНрдерд┐рд░ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд╡рд░ рд▓рд┐рд╣рд┐рдгреЗ рдШрдбрддреЗ - рддреНрдпрд╛рдЪ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреВрди рд╡рд╛рдЪрдгреНрдпрд╛рдкреВрд░реНрд╡реА. рдЖрдореНрд╣реА рдХреЗрд▓реЗрд▓рд╛ рдмрджрд▓, рдЕрд░реНрдерд╛рддрдЪ, рдмрдЧрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рддреЛ, рдкрд░рдВрддреБ рдЬреНрдпрд╛рдиреЗ рдореВрд│ рдХреЛрдб рд▓рд┐рд╣рд┐рд▓рд╛ рдЖрд╣реЗ рддреЗрдереВрди рдкрд░рдд рдареЗрд╡рддреЛ - рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рдгреЗ. рдЕрд╕реНрдерд┐рд░ рдХреАрд╡рд░реНрдб рд╡рд╛рдЪрд╡реВ рд╢рдХрддреЛ. рдЦрд░рдВ рддрд░, рдкреНрд░рд╢реНрдирд╛рддреАрд▓ рд╡рд┐рдзрд╛рдирд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдЕрд╕реНрдерд┐рд░ рдШреЛрд╖рд┐рдд рдХреЗрд▓реЗрд▓реА рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯ рд╡рд╛рдЪрддрд╛рдирд╛, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдиреЗрд╣рдореАрдЪ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдорд┐рд│реЗрд▓.
рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдореА рдЖрдзреА рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЕрд╕реНрдерд┐рд░ рдлреАрд▓реНрдбрд╕рд╛рдареА, рд▓реЗрдЦрди рдиреЗрд╣рдореАрдЪ (рд▓рд╛рдВрдм рдЖрдгрд┐ рджреБрд╣реЗрд░реАрд╕рд╣) рдПрдХ рдЕрдгреВ рдСрдкрд░реЗрд╢рди рдЕрд╕рддреЗ. рдЖрдгрдЦреА рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдореБрджреНрджрд╛: рдЬрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЕрд╕реНрдерд┐рд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдЕрд╕реЗрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЗрддрд░ рдШрдЯрдХрд╛рдВрдЪрд╛ рд╕рдВрджрд░реНрдн рдЕрд╕реЗрд▓ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЕреЕрд░реЗ, рд╕реВрдЪреА рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХрд╛рд╣реА рд╡рд░реНрдЧ), рддрд░ рдХреЗрд╡рд│ рдШрдЯрдХрд╛рдЪрд╛рдЪ рд╕рдВрджрд░реНрдн рдиреЗрд╣рдореАрдЪ "рддрд╛рдЬреЗ" рдЕрд╕реЗрд▓, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрд╕рд╛рдареА рдирд╛рд╣реА. рддреЛ рдпреЗрдгрд╛рд░ рдЖрд╣реЗ.
рддрд░, рдЖрдордЪреНрдпрд╛ рдбрдмрд▓-рд▓реЙрдХрд┐рдВрдЧ рд░реЕрдордХрдбреЗ рдкрд░рдд рдпрд╛. рдЕрд╕реНрдерд┐рд░ рд╡рд╛рдкрд░реВрди, рдЖрдкрдг рдпрд╛рдкреНрд░рдорд╛рдгреЗ рдкрд░рд┐рд╕реНрдерд┐рддреАрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░реВ рд╢рдХрддрд╛:
public class Keeper {
private volatile Data data = null;
public Data getData() {
if(data == null) {
synchronized(this) {
if(data == null) {
data = new Data();
}
}
}
return data;
}
}
рдпреЗрдереЗ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЕрджреНрдпрд╛рдк рд▓реЙрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдбреЗрдЯрд╛ == рд╢реВрдиреНрдп рдЕрд╕рд▓реНрдпрд╛рд╕рдЪ. рдЖрдореНрд╣реА рдЕрд╕реНрдерд┐рд░ рд╡рд╛рдЪрди рд╡рд╛рдкрд░реВрди рдЙрд░реНрд╡рд░рд┐рдд рдкреНрд░рдХрд░рдгреЗ рдлрд┐рд▓реНрдЯрд░ рдХрд░рддреЛ. рд╡реЙрд▓реЗрдЯрд╛рдЗрд▓ рд╕реНрдЯреЛрдЕрд░ рдШрдбрддреЗ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрджреНрд╡рд╛рд░реЗ рдЕрдЪреВрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ - рдЕрд╕реНрдерд┐рд░ рд╡рд╛рдЪрдирд╛рдкреВрд░реНрд╡реА, рдЖрдгрд┐ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдордзреНрдпреЗ рд╣реЛрдгрд╛рд░реА рд╕рд░реНрд╡ рдСрдкрд░реЗрд╢рдиреНрд╕ рдлреАрд▓реНрдбрдЪреЗ рдореВрд▓реНрдп рд╡рд╛рдЪрдгрд╛рд▒реНрдпрд╛рд▓рд╛ рджреГрд╢реНрдпрдорд╛рди рдЕрд╕рддрд╛рдд.