рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдардХ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ "рд╕рд┐рдВрдЧрд▓рдЯрди" рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЗрд╕реЗ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдореМрдЬреВрджрд╛ рдЬреНрдЮрд╛рди рдХреЛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд▓реЗрдЦ рдХреЛ рдкрд╣рд▓реЗ рд╣рдмреНрд░рд╣рд╛рдмреНрд░ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд
рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдзреНрдпрдпрди рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рдЬрд╛рд╡рд╛ рдореЗрдВ рдЖрд▓рд╕реА рд╕рд┐рдВрдЧрд▓рдЯрди
рд▓реЗрдЦрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрд░рдВрдн рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдЬрд╛рдирддрд╛ рд╣реИред
1 рд╕реНрдереИрддрд┐рдХ рдХреНрд╖реЗрддреНрд░
public class Singleton { public static final Singleton INSTANCE = new Singleton(); }
+ рд╕рд░рд▓ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
+ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛
- рдХреЛрдИ рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг рдирд╣реАрдВ
2 рдПрдиреБрдо рд╕рд┐рдВрдЧрд▓рдЯрди
рдЬреЛрд╢реБрдЖ рдмрд▓реЛрдЪ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ [1]ред
public enum Singleton { INSTANCE; }
+ рдордЬрд╛рдХрд┐рдпрд╛
+ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕реАрд░рд┐рдпрд▓
+ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░
+ EnumSet, EnumMap, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
+ рд╕рдорд░реНрдерди рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
- рдХреЛрдИ рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг рдирд╣реАрдВ
рдЬрд╛рд╡рд╛ рдореЗрдВ рдЖрд▓рд╕реА рд╕рд┐рдВрдЧрд▓рдЯрди
рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЬрд╛рд╡рд╛ рдореЗрдВ рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдЧрд▓рдЯрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдХрдо рд╕реЗ рдХрдо рддреАрди рд╡реИрдз рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред
1 рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реНрдб рдПрдХреНрд╕реЗрд╕рд░
public class Singleton { private static Singleton instance; public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
+ рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг
- рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкрд╣реБрдВрдЪ рдореЗрдВ рдХрдо рдЙрддреНрдкрд╛рджрдХрддрд╛ (рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб)
2 рдбрдмрд▓ рдЬрд╛рдБрдЪ рддрд╛рд▓рд╛ рдФрд░ рдЕрд╕реНрдерд┐рд░
public class Singleton { private static volatile Singleton instance; public static Singleton getInstance() { Singleton localInstance = instance; if (localInstance == null) { synchronized (Singleton.class) { localInstance = instance; if (localInstance == null) { instance = localInstance = new Singleton(); } } } return localInstance; } }
+ рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг
+ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди
- рдХреЗрд╡рд▓ JDK 1.5 [5] рдХреЗ рд╕рд╛рде рд╕рдорд░реНрдерд┐рдд
2.1 рдпрд╣ рдЕрд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛?
рдбрдмрд▓ рдЪреЗрдХреНрдб рд▓реЙрдХ рдореБрд╣рд╛рд╡рд░реЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдЬрд╛рд╡рд╛ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдк рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдЗрд╕ рдЖрджреЗрд╢ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ [2, 3]:
рд╣рдо рдПрдХ рдирдпрд╛ рдЫрд╛рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ: рдЫрд╛рддреНрд░ s = рдирдпрд╛ рдЫрд╛рддреНрд░ (), рдлрд┐рд░
1) local_ptr = malloc (sizeof (рдЫрд╛рддреНрд░)) // рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди;
2) s = local_ptr // рд╕реВрдЪрдХ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг;
3) рдЫрд╛рддреНрд░ :: ctor (s); // рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг (рдЦреЗрддреЛрдВ рдХрд╛ рдЖрд░рдореНрднрд┐рдХрд░рдг);
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рдЪрд░рдг рдХреЗ рдмреАрдЪ, рдПрдХ рд╕реНрдерд┐рддрд┐ рд╕рдВрднрд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдФрд░ рдзрд╛рдЧрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕ рд╢рд░реНрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рд╕реВрдЪрдХ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ) рдПрдХ рдЕрдкреВрд░реНрдг рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ JDK 1.5 [5] рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, JSR-133 [5] рдХреЗ рд▓реЗрдЦрдХ рдбрдмрд▓ рдЪреЗрд╕ рд▓реЙрдХрдб рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдирдХреЗ рд░рд╡реИрдпреЗ рдХреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рд▓реЗрдХрд┐рди рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдбрд┐рдВрдЧ рдореБрд╣рд╛рд╡рд░реЗ рдореМрдЬреВрдж рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдбрдмрд▓-рдЪреЗрдХреНрдб рд▓реЙрдХрд┐рдВрдЧ рдореБрд╣рд╛рд╡рд░реЗ, рдЬреЛ рдереНрд░реЗрдбреНрд╕ рдХреЛ рдмрд┐рдирд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИрдВред рд▓рдЧрднрдЧ рдРрд╕реЗ рд╕рднреА рдореБрд╣рд╛рд╡рд░реЗ рдореМрдЬреВрджрд╛ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рддрд╣рдд рдЕрдорд╛рдиреНрдп рд╣реИрдВ, рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рддрд╣рдд рдЕрдорд╛рдиреНрдп рдмрдиреЗ рд░рд╣рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрд╕реНрдерд┐рд░ рдХреЗ рдмрд┐рдирд╛ рдбрдмрд▓ рдЪреЗрдХреНрдб рд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЦрддрд░рдирд╛рдХ рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, JVM рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг, рдЕрдиреБрд╕реВрдЪрдХ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ JIT рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдЙрдард╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реАред
рдЕрдВрдд рдореЗрдВ, рдбрдмрд▓ рдЪреЗрдХреНрдб рд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБрдУрдВ (рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЗрдВрдЯреЗрдЧрд░, рдлреНрд▓реЛрдЯ, рдЖрджрд┐) рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
3 рдорд╛рдВрдЧ рдзрд╛рд░рдХ рдореБрд╣рд╛рд╡рд░реЗ рдкрд░
public class Singleton { public static class SingletonHolder { public static final Singleton HOLDER_INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.HOLDER_INSTANCE; } }
+ рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг
+ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди
- рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдкреНрд░рджрд░реНрд╢рди
рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд╛рдЗрдХреНрд░реЛ-рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ [6], рдЬреЛ рджреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрдЪрд╛рд▓рди (рдлрд╝реАрд▓реНрдб рд╡реЗрддрди рд╡реГрджреНрдзрд┐) рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдорд╛рдк рджреЛрд╣рд░реЗ рджреЛрд╣рд░реЗ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ 2 рдбреБрдУ T7300 2GHz рдорд╢реАрди, 2 рдЬреАрдмреА рд░реИрдо рдФрд░ рдЬрд╛рд╡рд╛ рд╣реЙрдЯрд╕реНрдкреЙрдЯ (рдЯреАрдПрдо) рдХреНрд▓рд╛рдЗрдВрдЯ рд╡реАрдПрдо (17.0-рдмреА 17 рдХрд╛ рдирд┐рд░реНрдорд╛рдг) рдкрд░ рдХрд┐рдП рдЧрдП рдереЗред рдЧрддрд┐ рдХреА рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП, рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдФрд░ рдЗрд╕рд▓рд┐рдП, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрдкреНрдЪрд░) рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб * 100,000 рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
(рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реИ)
| рдЧреНрд░рд╛рд╣рдХ | рд╕рд░реНрд╡рд░ |
---|
рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреНрдб рдПрдХреНрд╕реЗрд╕рд░ | 42.6 | 86.3 |
рдбрдмрд▓ рдЪреЗрдХреНрдб рд▓реЙрдХ рдФрд░ рд╡рд╛рд╖реНрдкрд╢реАрд▓ | 179.8 | 202.4 |
рдорд╛рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░ | 181.6 | 202.7 |
рдирд┐рд╖реНрдХрд░реНрд╖: рдпрджрд┐ рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк
2x рд╕реЗ
4x рддрдХ рддреНрд╡рд░рдг (рдЧрддрд┐) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╛рд░рд╛рдВрд╢
рд╣рдо "рд▓реЛрдиреЗрд░" рдЯреЗрдореНрдкреНрд▓реЗрдЯ [1] рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдпрд╛ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫреЛрдЯреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
1) рдЬрд╣рд╛рдВ рднреА рд╕рдВрднрд╡ рд╣реЛ, рд╕рд╛рдорд╛рдиреНрдп (рдЖрд▓рд╕реА рдирд╣реАрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
2) рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдорд╛рдВрдб рд╣реЛрд▓реНрдбрд░ рдореБрд╣рд╛рд╡рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
3) рд╕рд░рд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбрдмрд▓ рдЪреЗрдбрдХреЗрдб рд▓реЙрдХ рдФрд░ рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдореБрд╣рд╛рд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
4) рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реНрдб рдПрдХреНрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд╕рд┐рдВрдЧрд▓рдЯрди
рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЪреБрдирд╛ рд╣реИ - рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреНрдб рдПрдХреНрд╕реЗрд╕рд░ред рдПрдХ рдУрд░, рдпрд╣ рд╕рдВрдЧрддрддрд╛ рдФрд░ рдЙрдЪрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реИред
рд╕реНрд░реЛрдд рджреНрд╡рд╛рд░рд╛ рдПрдХ рддреНрд╡рд░рд┐рдд grep рдЦреЛрдЬ рдиреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ JCL рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдРрд╕реЗ рд╕реНрдерд╛рди рд╣реИрдВред
рд╢рд╛рдпрдж рдЕрдЧрд▓рд╛ рд▓реЗрдЦ "рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рднреА рд╕рд┐рдВрдЧреНрд▓рдЯрди рд╡рд░реНрдЧ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реЛрдВ?" :)
рд▓рд┐рдВрдХ
[рез] рдЬреЛрд╢реБрдЖ рдмрд▓реЛрдЪ, Google I / O 2008 рдореЗрдВ
рдкреНрд░рднрд╛рд╡реА рдЬрд╛рд╡рд╛ рд░реАрд▓реЛрдбреЗрдб рд╡рд╛рд░реНрддрд╛ (
рд╡реАрдбрд┐рдпреЛ );
[реи]
рдбрдмрд▓-рдЪреЗрдХрд┐рдВрдЧ рд▓реЙрдХрд┐рдВрдЧ рдФрд░ рд╕рд┐рдВрдЧрд▓рдЯрди рдкреИрдЯрд░реНрди ;
[рей]
"рдбрдмрд▓-рдЪреЗрдХреНрдб рд▓реЙрдХрд┐рдВрдЧ рдЯреВрдЯреА рд╣реБрдИ рд╣реИ" рдШреЛрд╖рдгрд╛ ;
[рек]
en.wikipedia.org/wiki/Double-checked_locking[рел]
рдЬреЗрдПрд╕рдЖрд░ -резрейрей[рем]
рдорд╛рдЗрдХреНрд░реЛрдмреЗрдирдорд╛рд░реНрдХ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ