рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реНрдореГрддрд┐ рдореЙрдбрд▓ рдФрд░ рди рдХреЗрд╡рд▓

рд╡рд┐рд╖рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ "рдЬрд╛рд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореМрд▓рд┐рдХ рдмрд╛рддреЗрдВ, рдЬреЛ рдЬрд╛рдирдиреЗ рд▓рд╛рдпрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрддреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрддрд╛ рд╣реИред" рдкрд┐рдЫрд▓рд╛ рд╡рд┐рд╖рдп: рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдмрд╛рдЗрдирд░реА рд╕рдВрдЧрддрддрд╛ рдФрд░ рди рдХреЗрд╡рд▓

рдЬрд╛рд╡рд╛ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдПрдХ рдРрд╕реА рдЪреАрдЬрд╝ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдХреЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╛рдлреА рдХреБрдЫ рдЗрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╖рдп рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХрднреА-рдХрднреА рдЙрдирдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЬреЗрдПрдордПрдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдбрдмрд▓-рдЪреЗрдХ рдХрд┐рдП рдЧрдП рд▓реЙрдХрд┐рдВрдЧ рдкреИрдЯрд░реНрди рдХрд╛ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЧрд▓рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

public class Keeper { private Data data = null; public Data getData() { if(data == null) { synchronized(this) { if(data == null) { data = new Data(); } } } return data; } } 

рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдИ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЕрд╡рд░реБрджреНрдз рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рдХрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпреЗ рд▓реЛрдЧ рдХрдИ рдХрд╛рд░рдХреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЬрд╝реЛрдВрдмреА рд╕рд░реНрд╡рдирд╛рд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рдореИрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рдмрддрд╛рдКрдВрдЧрд╛ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рднрд╛рд░рддреАрдп рдлрд┐рд▓реНрдо рдореЗрдВ рдХрд╣рд╛, "рдпрд╣ рдЬрд╛рдирдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред тАЭ рдЗрд╕рд▓рд┐рдП, рд╕рдлрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдВрдЬрдиреЛрдВ, рдЖрдк рдЖрдЧреЗ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдереЛрдбрд╝рд╛ рдЗрддрд┐рд╣рд╛рд╕

1995 рдореЗрдВ рдЬрд╛рд╡рд╛ 1.0 рдХреЗ рд╕рд╛рде JMM рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдпрд╣ рдПрдХ рд╕реБрд╕рдВрдЧрдд рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╛ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдореЗрдВ рдХрдИ рдЧрдВрднреАрд░ рдЦрд╛рдорд┐рдпрд╛рдВ рдФрд░ рдЧрд▓рддрдлрд╣рдорд┐рдпрд╛рдВ рдереАрдВред рд╕рдмрд╕реЗ рджреБрдЦрдж рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрдВрддрд┐рдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЧрд╛рд░рдВрдЯреА рдХреА рдХрдореА рдереАред рдпрд╣реА рд╣реИ, рдПрдХ рдзрд╛рдЧрд╛ рдПрдХ рдЕрдВрддрд┐рдо рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдзрд╛рдЧрд╛ рдЗрд╕ рдЕрдВрддрд┐рдо рдлрд╝реАрд▓реНрдб рдореЗрдВ рдорд╛рди рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ java.lang.String рд╡рд░реНрдЧ рдХреЛ рднреА рдЗрд╕рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдореЙрдбрд▓ рдиреЗ рд╕рдВрдХрд▓рдХ рдХреЛ рдХрдИ рдкреНрд░рднрд╛рд╡реА рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА, рдФрд░ рдЬрдм рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, 2004 рдореЗрдВ, JSR 133 рдЬрд╛рд╡рд╛ 5 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рдореВрд▓ рдореЙрдбрд▓ рдХреА рдХрдорд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред

atomicity

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдпрд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдХреБрдЫ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдЧреИрд░-рдкрд░рдорд╛рдгреБ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рдорд╛рди рдПрдХ рдзрд╛рдЧреЗ рд╕реЗ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдордзреНрдпрд╡рд░реНрддреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЖрдкрдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреВрд░ рддрдХ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдПрдХ рд╣реА рд▓рдВрдмреЗ рдФрд░ рджреЛрд╣рд░реЗ рдХреЗ рд░рд┐рдХреЙрд░реНрдб, рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрдерд┐рд░ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкрд░рдорд╛рдгреБ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рджреЛ рдСрдкрд░реЗрд╢рдиреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ: рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдирд┐рдЪрд▓реЗ 32 рдмрд┐рдЯреНрд╕ рдЕрд▓рдЧ рд╕реЗред ( рдорд╛рдирдХ рджреЗрдЦреЗрдВ)

рджреГрд╢реНрдпрддрд╛


рдкреБрд░рд╛рдиреЗ JMM рдореЗрдВ, рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдХрд╛ рдЕрдкрдирд╛ рдХреИрд╢ (рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА) рд╣реЛрддрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдХреБрдЫ рд╕реНрдерд┐рддрд┐ рдЬрд┐рд╕реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рдХреИрд╢ рдХреЛ рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╕рдордп рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛, рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдореЗрдВ рдФрд░ рдХреИрд╢ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдирдП рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдзрд╛рдЧрд╛ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХрд┐рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ рд╣реИ, рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐, рд╕рдорд╛рди C ++ рдХреЗ рд╡рд┐рдкрд░реАрдд, "рдЖрдЙрдЯ-рдСрдл-рдерд┐рди-рдПрдпрд░" рдорд╛рди рдХрднреА рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдзрд╛рд░рд╛ рджреНрд╡рд╛рд░рд╛ рдордирд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдпрд╛ рддреЛ рдЗрд╕реЗ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдПрдХ рдореВрд▓реНрдп рд╣реИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗред

рдкреБрди: рдХреНрд░рдо

рд▓реЗрдХрд┐рди рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрднреА рдПрдХ рдЖрджреЗрд╢ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдореБрдлреНрдд рдореЗрдВ рд╕реНрд╡реИрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛! рдЕрдиреБрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдлреБрд░реНрддреАрд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдЬреЗрдЖрдИрдЯреА рднреА рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдкреНрд░рднрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рдзрд╛рдЧреЗ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рджреВрд╕рд░рд╛ рдзрд╛рдЧрд╛ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдпрд╣ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╕рдордЭрдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдмрд╕ рдЗрд╕реЗ рдкрдврд╝рдирд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рдРрд╕реЗ рдХреЛрдб рд╣реЛрдиреЗ рджреЗрдВ:

 public class ReorderingSample { boolean first = false; boolean second = false; void setValues() { first = true; second = true; } void checkValues() { while(!second); assert first; } } 

рдФрд░ рдЗрд╕ рдХреЛрдб рдореЗрдВ, checkValues рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдереНрд░реЗрдб рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ checkValues рдХреЛ рджреВрд╕рд░реЗ рдереНрд░реЗрдб рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ second рдлрд╝реАрд▓реНрдб first рдлрд╝реАрд▓реНрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╛рдж рдореЗрдВ true рд╕реЗрдЯ рд╣реЛрддрд╛ true , рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬрдм (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдпрджрд┐) рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рджреВрд╕рд░рд╛ рдлрд╝реАрд▓реНрдб рд╕рддреНрдп рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рднреА рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдпрд╣ рдерд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рд╣реЛрдЧреА рдХрд┐ рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ, рдЕрдиреНрдп рдереНрд░реЗрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд░рд╛рдзрд╛рд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХреНрд░рдо рдореЗрдВ, рдореИрдВ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рдЕрднрд┐рдХрдерди рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛ ( рдирд╣реАрдВ, рдореИрдВ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ -ea рд╕реНрд╡рд┐рдЪ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓ рдЧрдпрд╛ ), рдФрд░, рд╣рддрд╛рд╢рд╛ рдореЗрдВ, рдореИрдВрдиреЗ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ "рдХреНрдпрд╛ рдХреБрдЦреНрдпрд╛рдд рдкреНрд░рджрд░реНрд╢рди рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП "рдлрд┐рд░ рд╕реЗ рднрдбрд╝рдХрд╛рдиреЗ"ред рддреЛ рд╕рд░реНрдЧреЗрдИ рдХреБрдХреНрд╕реЗрдВрдХреЛ рдиреЗ рдореЗрд░реЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛:
TSO рд╡рд╛рд▓реА рдорд╢реАрдиреЛрдВ рдкрд░ (рдЬрд┐рд╕ рдкрд░ x86 рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ) рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ
рддреЛрдбрд╝рдирд╛ред рдпрд╣ рдХреБрдЫ ARM'e рдпрд╛ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
PowerPCред рдЖрдк рдЕрд▓реНрдлрд╛ рдХреЛ рднреА рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕рдмрд╕реЗ рдХрдордЬреЛрд░ рдСрд░реНрдбрд░рд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ред рдЕрд▓реНрдлрд╛ рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЧреБрдард▓реА рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рдерд╛ред рдпрд╣ рд╕реМрднрд╛рдЧреНрдп рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЙрдирдХреА рдореГрддреНрдпреБ рд╣реЛ рдЧрдИред рдиреЗрдЯ рдкрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЗ рдЯрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг:
(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╕рдорд╛рди рд╣реИ - рд▓реЗрдЦрдХ рдХреА рдЯрд┐рдкреНрдкрдгреА)
... x86 рдкрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдЖрдкрдиреЗ рджреЗрдЦрд╛
"рдмреА" рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ "рдП" рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред


рдФрд░ рдЬрдм рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдП рдЧрдП рд╣рд░ рдкрд╣рд▓реВ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп-рдкреНрд░рджрд░реНрд╢рди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрдЧреЗрдИ рдиреЗ рдореБрдЭреЗ рдЦреБрд╢ рдХрд░рддреЗ рд╣реБрдП рдХрд╣рд╛ рдХрд┐ рд▓рдВрдмреЗ рдФрд░ рдХрдард┐рди рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдореИрдиреБрдЕрд▓ рдкрдврд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореИрдВ рдлреЛрди рдкрд░ рдПрдХ рдкреНрд░рднрд╛рд╡ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЕрднреА рднреА рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рд╕рдордЭреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЗрд╕реЗ рдмрд░реНрдмрд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ Data рд╡рд░реНрдЧ рдХреЛ рдХреБрдЫ рдмрд╣реБрдд рддреБрдЪреНрдЫ рдЧрдгрдирд╛рдПрдБ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрдВ рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЧреИрд░-рдЕрдВрддрд┐рдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдХреБрдЫ рдорд╛рди рд▓рд┐рдЦреЗрдВ:

 public class Data { String question; int answer; int maxAllowedValue; public Data() { this.answer = 42; this.question = reverseEngineer(this.answer); this.maxAllowedValue = 9000; } } 


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдереНрд░реЗрдб рдЬреЛ рдкрд╣рд▓реЗ рдЙрд╕ data == null рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ data == null рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛:
  1. рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ
  2. Data рд╡рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ Data рдЬрд╛рдПрдЧрд╛ Data
  3. Data рд╡рд░реНрдЧ рдХреЗ answer рдХреНрд╖реЗрддреНрд░ рдореЗрдВ 42 рд▓рд┐рдЦрддрд╛ рд╣реИ
  4. рдХреНрд▓рд╛рд╕ Data рдХреЗ question рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреБрдЫ рд▓рд╛рдЗрди рд▓рд┐рдЦреЗрдВрдЧреЗ
  5. Data рд╢реНрд░реЗрдгреА рдХреЗ maxAllowedValue рдлрд╝реАрд▓реНрдб рдореЗрдВ рдорд╛рди 9000 рд▓рд┐рдЦрддрд╛ рд╣реИ
  6. Keeper рд╡рд░реНрдЧ рдХреЗ data рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд╡ рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ
рдХреНрдпрд╛ рдЖрдк рдкрдХрдбрд╝ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ? рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЦрдВрдб 3-5 рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЦрдВрдб 6 рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдпрд╣ рдереНрд░реЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдЧрд▓рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рджреЗрдЦреЗрдЧрд╛ рдЬрдм рдЙрд╕рдХреЗ рдлрд╝реАрд▓реНрдб рдЕрднреА рддрдХ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдХрд┐рд╕реА рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕рдЦреНрдд рд╕реЗрдЯ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ / рдХрдВрдкрд╛рдЗрд▓рд░ / рдЖрдкрдХреА рдмреБрд░рд╛рдИ рдбрдмрд▓ рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ-рдкрд╣рд▓реЗ

рдкрд░рд┐рднрд╛рд╖рд╛

рдЗрди рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЛ рддрдерд╛рдХрдерд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЪрд▓реЛ рдПрдХ рдзрд╛рд░рд╛ рдПрдХреНрд╕ рдФрд░ рдПрдХ рдзрд╛рд░рд╛ рд╡рд╛рдИ (рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдзрд╛рд░рд╛ рдПрдХреНрд╕ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ)ред рдФрд░ рдСрдкрд░реЗрд╢рди рдП (рдереНрд░реЗрдб рдПрдХреНрд╕ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ) рдФрд░ рдмреА (рдереНрд░реЗрдб рд╡рд╛рдИ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ) рд╣реЛрдиреЗ рджреЗрдВред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдП рд╣реЛрддрд╛ рд╣реИ-рдмреА рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рдП рдХреЗ рдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдереНрд░реЗрдб рдПрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдмреА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рдж рдФрд░ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рдереНрд░реЗрдб рд╡рд╛рдИ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред
рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдереЛрдбрд╝рд╛ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВред рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдзрд╛рд░рд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣реИ, рдЕрд░реНрдерд╛рдд, X рдФрд░ Y рд╕рдорд╛рди рд╣реИрдВред рдПрдХ рд╕реВрддреНрд░ рдХреЗ рдЕрдВрджрд░, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рд╣реИ, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдСрдкрд░реЗрд╢рди рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реЛрддреЗ рд╣реИрдВ-рдЙрд╕ рдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рд╕реНрд░реЛрдд рдХреЛрдб (рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрд░реНрдбрд░) рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рдмрд┐рдирд╛ ... рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рд╣реИ:


рдпрд╣рд╛рдВ рдмрд╛рдИрдВ рдУрд░, рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛ рдХрд┐ рд╕реНрдЯреНрд░реАрдо Y рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ, рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВ рдФрд░ рдЬреЛ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рджрд╛рдИрдВ рдУрд░, рдЙрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдмрд╛рдИрдВ рдУрд░ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЕрднреА рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ, рдЬреЛ рд╕рднреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ-рдкрд╣рд▓реЗ рд╕рдВрдмрдВрдз рд╕рдХрд░реНрдордХ рд╣реИ , рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рдП -рд╕реЗ рдкрд╣рд▓реЗ рдмреА рдФрд░ рдмреА рд╣реЛрддрд╛ рд╣реИ- рд╕реА рд╕реЗ рдкрд╣рд▓реЗ , рддреЛ рдП рд╣реЛрддрд╛ рд╣реИ-рдкрд╣рд▓реЗ рд╕реАред

рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИ-рд░рд┐рд▓реЗрд╢рдирд╢рд┐рдк рд╕реЗ рдкрд╣рд▓реЗ


рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЭрд╛рдореБрдореЛ рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдиреЗ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЗрдПрд╕рдЖрд░ -133 рдХреБрдХрдмреБрдХ рдореЗрдВ рдПрдХ рдЧрд╣рд░рд╛ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рддрд╣реА рд╕реНрддрд░ рдкрд░ рд▓рд╛рдКрдВрдЧрд╛ рдФрд░, рд╢рд╛рдпрдж, рдореИрдВ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░реВрдВрдЧрд╛ред рдЪрд▓реЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: рддрд╛рд▓реЗред

1. рдореЙрдиреАрдЯрд░ рдХрд╛ рд╡рд┐рдореЛрдЪрди рдЙрд╕реА рдореЙрдиреАрдЯрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдпрд╣ рд░рд┐рд▓реАрдЬ рд╣реИ, рдирд┐рдХрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдкрдХреЛ wait рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдЬреНрдЮрд╛рди рдХреИрд╕реЗ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдмрд╕ рдмрд╛рд╣рд░реА рдЪреЗрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рдЕрдм рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдХреЛ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЧрдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдореЙрдирд┐рдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдФрд░ рдЬрдм рд╕реЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рд╣реЛрдиреЗ рддрдХ рдЙрд╕реЗ рдЬрд╛рдиреЗ рдирд╣реАрдВ рджреЗрдЧрд╛, рд╣рдо рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдмрджрд▓рд╛рд╡ рджреЗрдЦреЗрдВрдЧреЗ, рдФрд░ рдЕрд▓рдЧ рд╕реЗ рдирд╣реАрдВ:

 public class Keeper { private Data data = null; public Data getData() { synchronized(this) { if(data == null) { data = new Data(); } } return data; } } 

2. рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдЪрд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЙрд╕реА рдЪрд░ рд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ ред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдордиреЗ рдЬреЛ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдЧрд▓рддрддрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╡рд╣ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рд╡рд╣ рдЖрдпрд╛ рдерд╛ - рд╣рд░ рдмрд╛рд░ рд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрд╕реНрдерд┐рд░ рдХреАрд╡рд░реНрдб рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди (2) рдХрдерди рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрдм рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬрд┐рд╕реЗ рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрдврд╝рдиреЗ рдкрд░ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдорд┐рд▓реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдЕрд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦрди рд╣рдореЗрд╢рд╛ (рд▓рдВрдмреЗ рдФрд░ рджреЛрд╣рд░реЗ рд╕рд╣рд┐рдд) рдПрдХ рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд╕реНрдерд┐рд░ рдЗрдХрд╛рдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░рдгреА, рд╕реВрдЪреА рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рд╡рд░реНрдЧ) рдХреЗ рд╕рдВрджрд░реНрдн рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдЗрдХрд╛рдИ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣рдореЗрд╢рд╛ "рддрд╛рдЬрд╛" рд╣реЛрдЧрд╛ред рд╢рд╛рдорд┐рд▓ рдереЗред

рддреЛ, рд╣рдорд╛рд░реЗ рдбрдмрд▓-рд▓реЙрдХрд┐рдВрдЧ рдореЗрдврд╝реЗ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рдЕрд╕реНрдерд┐рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 public class Keeper { private volatile Data data = null; public Data getData() { if(data == null) { synchronized(this) { if(data == null) { data = new Data(); } } } return data; } } 

рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдХ рддрд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЧрд░ data == null ред рдмрд╛рдХреА рдорд╛рдорд▓реЗ рд╣рдо рд╡рд╛рд╖реНрдкрд╢реАрд▓ рд░реАрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕реБрдзрд╛рд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрд╕реНрдерд┐рд░ рд╕реНрдЯреЛрд░ рд╣реЛрддрд╛ рд╣реИ- рд╡рд╛рд╖реНрдкрд╢реАрд▓ рд░реАрдб рд╕реЗ рдкрд╣рд▓реЗ , рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдСрдкрд░реЗрд╢рди рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЬрд╛рдВрдЪрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рд╡рд╛рд╖реНрдкрд╢реАрд▓ рд╕реНрдЯреЛрд░ + рд░реАрдб рд▓реЙрдХрд┐рдВрдЧ рд╕реЗ рддреЗрдЬ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╣реА рдкреНрд░рджрд░реНрд╢рди рдЕрднрд┐рдпрдВрддрд╛ рдЕрдердХ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рдорд╛рдЗрдХреНрд░реЛрдмреЗрдирдЪрд░реНрдЪ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдорд╛рдкрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЧрд▓рдд рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдХ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЕрдкрдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреА рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реНрд▓рд╛рдЗрдб # 54 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЗрд╕ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдЕрд╕реНрдерд┐рд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдпрд╣ рд╕рдм рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдБ)ред рдпреВрдкреАрдбреА: рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЯрд┐рдкреНрдкрдгреА рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╖реНрдкреАрдХрд░рдг, рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рддреЗрдЬ рд╣реИред

3. final рдлрд╝реАрд▓реНрдб рдореЗрдВ рдорд╛рди рд▓рд┐рдЦрдирд╛ (рдФрд░, рдпрджрд┐ рдпрд╣ рдлрд╝реАрд▓реНрдб рдПрдХ рд▓рд┐рдВрдХ рд╣реИ, рддреЛ рдЗрд╕ рдлрд╝реАрд▓реНрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЪрд░ (dereference- рд╢реНрд░реГрдВрдЦрд▓рд╛)) рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм -рдкрд╣рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреБрдЫ рд╡реИрд░рд┐рдПрдмрд▓ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╛рд╣рд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рддрд╛ред

рдпрд╣ рднреА рднреНрд░рд╛рдордХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рд░ рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рдХреЛрдИ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдореЗрдВ final рдлрд╝реАрд▓реНрдб рд╣реИ, рддреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЗрд╕ final рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рдпрд╣ рдлрд╝реАрд▓реНрдб рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдпрджрд┐ рдЖрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ (рдпрд╛рдиреА this ) рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдмрд╛рд╣рд░ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдЖрдкрдХреА рд╡рд╕реНрддреБ рдХреЛ рдЕрдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЕрдВрддрд┐рдо рд░рд┐рдХреЙрд░реНрдб рдЬрд┐рд╕рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, final , рд╣рд░ рдмрд╛рд░ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдФрд░ рдмрд┐рдирд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд┐рдирд╛ рдЬрд╛рджреБрдИ рддрд░реАрдХреЗ рд╕реЗ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

 public class Data { String question; int answer; final int maxAllowedValue; public Data() { this.answer = 42; this.question = reverseEngineer(this.answer); this.maxAllowedValue = 9000; } private String reverseEngineer(int answer) { return null; } } 

рдПрдХрдорд╛рддреНрд░ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдЖрдкрдХреЗ рд╕рд░рд▓ рд╕реНрд╡рд╛рдЧрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рд╡рд╣ рдЖрдкрдХреЛ рд╕рдордЭ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдЖрдк рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд▓реНрджреА рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣рд╛рдБ "рд╕реНрд╡рдЪреНрдЫ рдЪрд╛рд▓" рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЧрд░реНрд╡ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

UPD: рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХреНрдпреЛрдВ ред UPD2 : рдореБрджреНрджреЗ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж, рд░реБрд╕реНрд▓рд╛рди рдиреЗ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдлрд╝реАрд▓реНрдб рднреА рд╕реНрдерд┐рд░ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрд┐ рдЬреЗрд╡реАрдПрдо рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЖрд░рдВрднреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╣реА рд╕рд┐рдВрдЧрд▓рдЯрди ( рд╣рдо рдЗрд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдПрдХ рдкреИрдЯрд░реНрди рдпрд╛ рдПрдХ рдПрдВрдЯреАрдкреИрдЯрд░реНрди рдирд╣реАрдВ рдХрд╣реЗрдВрдЧреЗред рд▓реЗрдЦ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ;) ) рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ;

 public class Singleton { private Singleton() {} private static class InstanceContainer { private static final Singleton instance = new Singleton(); } public Singleton getInstance() { return InstanceContainer.instance; } } 
рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдЬреЛ рдкреНрд░рднрд╛рд╡реА рдЬрд╛рд╡рд╛ рдкрдврд╝рддрд╛ рд╣реИ рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдкрдиреЗ рдЕрдЪрд╛рдирдХ рдЗрд╕реЗ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рддреЛ рдПрдирдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдФрд░ рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреЗ рд╕рд╛рде, рдФрд░ рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдмреЙрдХреНрд╕ред UPD: рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реИрд╕реЗ, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд┐рдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрд░рд╛рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рд╡реЗ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ, рдореИрдВ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ: "рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ рдЕрдЪреНрдЫрд╛ рд╣реИред " рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрдИ рд╡рд┐рд╖рдп рд╣реИрдВ, рдпрд╣ рд╕рдмрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмреЗрд╣рдж рдЦреБрд╢реА рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдХреЛрдИ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЦреБрдж рдкрддрд╛ рд▓рдЧрд╛рдКрдВрдЧрд╛ рдФрд░ рдмрддрд╛рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдВрдЧрд╛ред UPD : рдЙрдиреНрд╣реЛрдВрдиреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд╣рд╛ ред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рд╢реНрддреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдЕрдиреНрдп рдСрдкрд░реЗрд╢рди рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреА рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдорд╛рдирдХ рдпрд╛ рдХрд╣реАрдВ рдФрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╣рд░ рдХреЛрдИред

рдХреНрд░реЗрдбрд┐рдЯ, рд▓рд┐рдВрдХ рдФрд░ рд╕рд╛рдорд╛рди

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП рдкреНрд░рджрд░реНрд╢рди рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдмрдХрд╡рд╛рд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдХреБрдЫ рдкрд░рд╛рдорд░реНрд╢ рдФрд░ рд▓реЗрдЦ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛: рдПрд▓реЗрдХреНрд╕реА рдереЗрд╢реЗрдб рд╢рд┐рдкрд┐рд▓реЗрд╡ рдФрд░ рд╕рд░реНрдЧреЗрдИ рд╡рд╛рд▓рд░рд╕ рдХреБрдХреНрд╕реЗрдВрдХреЛ ред

рдореИрдВ рдЙрди рд╕реНрд░реЛрддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреА рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВрдиреЗ рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╕рдордп рдФрд░ рд╡рд┐рд╖рдп рдкрд░ рд╕рд┐рд░реНрдл рдЕрдЪреНрдЫреЗ рд▓рд┐рдВрдХ:рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓, рдкрд░рд┐рд╡рд░реНрдзрди рдФрд░ рд╕реБрдзрд╛рд░ рдЫреЛрдбрд╝ рджреЗрдВ, рдореБрдЭреЗ рдкрдврд╝рдиреЗ рдФрд░ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In133981/


All Articles