CodeGym/Java Blog/рдпрд╛рджреГрдЪреНрдЫрд┐рдХ/рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ. рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢...
John Squirrels
рдкрд╛рддрд│реА 41
San Francisco

рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ. рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛ рдЧреНрд░реБрдкрдордзреНрдпреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ
рд╕рджрд╕реНрдп

рдкрд░рд┐рдЪрдп

рддрд░, рдЖрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА Java рдордзреНрдпреЗ рдереНрд░реЗрдбреНрд╕ рдЖрд╣реЗрдд. рддреНрдпрд╛рдмрджреНрджрд▓ рддреБрдореНрд╣реА Better together: Java and the Thread class рдпрд╛ рд╢реАрд░реНрд╖рдХрд╛рдЪреНрдпрд╛ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрдирд╛рдд рд╡рд╛рдЪреВ рд╢рдХрддрд╛ . рднрд╛рдЧ I - рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреЗ рдзрд╛рдЧреЗ . рд╕рдорд╛рдВрддрд░ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдереНрд░реЗрдб рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд. рдпрд╛рдореБрд│реЗ рдзрд╛рдЧреЗ рдПрдХрдореЗрдХрд╛рдВрд╢реА рдХрд╕рд╛ рддрд░реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддреАрд▓ рдпрд╛рдЪреА рджрд╛рдЯ рд╢рдХреНрдпрддрд╛ рдЕрд╕рддреЗ. рд╣реЗ рдХрд╕реЗ рдШрдбрддреЗ рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдХреЛрдгрддреА рдореВрд▓рднреВрдд рд╕рд╛рдзрдиреЗ рдЖрд╣реЗрдд рддреЗ рдкрд╛рд╣реВ рдпрд╛. рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - рез

рдЙрддреНрдкрдиреНрди

Thread.yield() рдзрдХреНрдХрд╛рджрд╛рдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдХреНрд╡рдЪрд┐рддрдЪ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рддреНрдпрд╛рдЪреЗ рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░реЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдереНрд░реЗрдбреНрд╕рдЪреА рдХрд╛рд╣реА рд░рд╛рдВрдЧ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдзрд╛рдЧреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рд╛рдзрд╛рдиреНрдпрдХреНрд░рдорд╛рдиреБрд╕рд╛рд░ рдзрд╛рдЧрд╛ рдЦрд╛рд▓реА рдпреЗрдИрд▓ рдЕрд╕реЗ рдХрд╛рд╣реА рд▓реЛрдХ рд▓рд┐рд╣рд┐рдд рдЖрд╣реЗрдд. рдЗрддрд░ рд▓реЛрдХ рд▓рд┐рд╣рд┐рддрд╛рдд рдХреА рдереНрд░реЗрдбрдЪреА рд╕реНрдерд┐рддреА "рд░рдирд┐рдВрдЧ" рд╡рд░реВрди "рд░рди рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп" рдордзреНрдпреЗ рдмрджрд▓реЗрд▓ (рдЬрд░реА рдпрд╛ рд╕реНрдерд┐рддреАрдВрдордзреНрдпреЗ рдлрд░рдХ рдирд╛рд╣реА, рдореНрд╣рдгрдЬреЗ рдЬрд╛рд╡рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдд рдлрд░рдХ рдХрд░рдд рдирд╛рд╣реА). рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдЕрд╢реА рдЖрд╣реЗ рдХреА рд╣реЗ рд╕рд░реНрд╡ рдЦреВрдкрдЪ рдХрдореА рдкреНрд░рд╕рд┐рджреНрдз рдЖрдгрд┐ рддрд░реАрд╣реА рдПрдХрд╛ рдЕрд░реНрдерд╛рдиреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ. рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - 2рдПрдХ рдмрдЧ рдЖрд╣реЗ ( JDK-6416721: (рд╕реНрдкреЗрдХ рдереНрд░реЗрдб) рдлрд┐рдХреНрд╕ Thread.yield() javadoc ) рдкрджреНрдзрддреАрдЪреНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рд╕рд╛рдареА рд▓реЙрдЧ рдХреЗрд▓реЗрд▓рд╛ yield(). рдЬрд░ рддреБрдореНрд╣реА рддреЗ рд╡рд╛рдЪрд▓реЗ рддрд░ рд╣реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреЗ рдХреАyield()рдкрджреНрдзрдд рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд Java рдереНрд░реЗрдб рд╢реЗрдбреНрдпреБрд▓рд░рд▓рд╛ рдХрд╛рд╣реА рд╢рд┐рдлрд╛рд░рд╕реА рджреЗрддреЗ рдХреА рдпрд╛ рдереНрд░реЗрдбрд▓рд╛ рдХрдореА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╡реЗрд│ рджрд┐рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХрд╛рдп рд╣реЛрддреЗ, рдореНрд╣рдгрдЬреЗ рд╢реЗрдбреНрдпреБрд▓рд░ рд╢рд┐рдлрд╛рд░рд╕реАрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░рддреЛ рдХреА рдирд╛рд╣реА рдЖрдгрд┐ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рдХрд╛рдп рдХрд░рддреЛ, рд╣реЗ JVM рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╡рд░ рдЖрдгрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ. рдЖрдгрд┐ рддреЗ рдЗрддрд░ рдХрд╛рд╣реА рдШрдЯрдХрд╛рдВрд╡рд░ рджреЗрдЦреАрд▓ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕реВ рд╢рдХрддреЗ. рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рдЭрд╛рд▓реНрдпрд╛рдореБрд│реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧрдЪрд╛ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдореБрд│реЗ рд╕рд░реНрд╡ рдЧреЛрдВрдзрд│ рд╣реЛрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗ. рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди рдпреЗрдереЗ рдЕрдзрд┐рдХ рд╡рд╛рдЪрд╛: Java Thread.yield() рдЪрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп .

рдЭреЛрдк

рдПрдХ рдзрд╛рдЧрд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджрд░рдореНрдпрд╛рди рдЭреЛрдкреВ рд╢рдХрддрд╛. рдЗрддрд░ рдереНрд░реЗрдбреНрд╕рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рдЪрд╛ рд╣рд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗ. рдЬрд╛рд╡рд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдЪрд╛рд▓рд╡рдгрд╛рд▒реНрдпрд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдордЪрд╛ рдЬрд╛рд╡рд╛ рдХреЛрдбрдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдереНрд░реЗрдб рд╢реЗрдбреНрдпреБрд▓рд░ рдЖрд╣реЗ . рдХреЛрдгрддрд╛ рдзрд╛рдЧрд╛ рдХрдзреА рд╕реБрд░реВ рдХрд░рд╛рдпрдЪрд╛ рддреЗ рдард░рд╡рддреЗ. рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдпрд╛ рд╢реЗрдбреНрдпреБрд▓рд░рд╢реА рдереЗрдЯ Java рдХреЛрдбрд╡рд░реВрди рд╕рдВрд╡рд╛рдж рд╕рд╛рдзреВ рд╢рдХрдд рдирд╛рд╣реА, рдлрдХреНрдд JVM рджреНрд╡рд╛рд░реЗ. рддреЛ рдХрд┐рдВрд╡рд╛ рддреА рд╢реЗрдбреНрдпреБрд▓рд░рд▓рд╛ рдзрд╛рдЧрд╛ рдереЛрдбрд╛рд╡реЗрд│ рдерд╛рдВрдмрд╡рд╛рдпрд▓рд╛ рд╕рд╛рдВрдЧреВ рд╢рдХрддреЛ, рдореНрд╣рдгрдЬреЗ рдЭреЛрдкрд╛рдпрд▓рд╛ рдареЗрд╡рд╛рдпрд▓рд╛. рддреБрдореНрд╣реА рдпрд╛ рд▓реЗрдЦрд╛рдВрдордзреНрдпреЗ рдЕрдзрд┐рдХ рд╡рд╛рдЪреВ рд╢рдХрддрд╛: Thread.sleep() рдЖрдгрд┐ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ . рд╡рд┐рдВрдбреЛрдЬ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдордордзреНрдпреЗ рдереНрд░реЗрдб рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рддреЗ рджреЗрдЦреАрд▓ рддреБрдореНрд╣реА рддрдкрд╛рд╕реВ рд╢рдХрддрд╛: рд╡рд┐рдВрдбреЛрдЬ рдереНрд░реЗрдбрдЪреЗ рдЕрдВрддрд░реНрдЧрдд . рдЖрдгрд┐ рдЖрддрд╛ рддреЗ рдЖрдкрд▓реНрдпрд╛ рдбреЛрд│реНрдпрд╛рдВрдиреА рдкрд╛рд╣реВрдпрд╛. рдЦрд╛рд▓реАрд▓ рдХреЛрдб рдирд╛рд╡рд╛рдЪреНрдпрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХрд░рд╛ HelloWorldApp.java:
class HelloWorldApp {
    public static void main(String []args) {
        Runnable task = () -> {
            try {
                int secToWait = 1000 * 60;
                Thread.currentThread().sleep(secToWait);
                System.out.println("Woke up");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        };
        Thread thread = new Thread(task);
        thread.start();
    }
}
рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдЖрд╣реЗ рдЬреЗ 60 рд╕реЗрдХрдВрджрд╛рдВрдкрд░реНрдпрдВрдд рдерд╛рдВрдмрддреЗ, рддреНрдпрд╛рдирдВрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╛рдкреНрдд рд╣реЛрддреЛ. рдЖрдореНрд╣реА " " рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЛ javac HelloWorldApp.javaрдЖрдгрд┐ рдирдВрддрд░ " " рд╡рд╛рдкрд░реВрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд╛рд▓рд╡рддреЛ java HelloWorldApp. рд╡реЗрдЧрд│реНрдпрд╛ рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реБрд░реВ рдХрд░рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡рд┐рдВрдбреЛрдЬрд╡рд░, рд╣реЗ рдЕрд╕реЗ рдЖрд╣реЗ: start java HelloWorldApp. рдкреАрдЖрдпрдбреА (рдкреНрд░реЛрд╕реЗрд╕ рдЖрдпрдбреА) рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА jps рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рддреЛ, рдЖрдгрд┐ рдЖрдореНрд╣реА " jvisualvm --openpid pid: рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - 3рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдЖрдордЪреНрдпрд╛ рдереНрд░реЗрдбрд▓рд╛ рдЖрддрд╛ "рд╕реНрд▓реАрдкрд┐рдВрдЧ" рд╕реНрдерд┐рддреА рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реА рдЖрд╣реЗ. рдЦрд░рддрд░, рдорджрдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдгрдЦреА рдПрдХ рд╕реБрдВрджрд░ рдорд╛рд░реНрдЧ рдЖрд╣реЗ. рдЖрдордЪреНрдпрд╛ рдзрд╛рдЧреНрдпрд╛рд▓рд╛ рдЧреЛрдб рд╕реНрд╡рдкреНрдиреЗ рдЖрд╣реЗрдд:
try {
	TimeUnit.SECONDS.sleep(60);
	System.out.println("Woke up");
} catch (InterruptedException e) {
	e.printStackTrace();
}
рдЖрдореНрд╣реА рд╕рд░реНрд╡рддреНрд░ рд╣рд╛рддрд╛рд│рдд рдЖрд╣реЛрдд рд╣реЗ рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдХрд╛ InterruptedException? рдЪрд▓рд╛ рд╕рдордЬреВрди рдШреЗрдКрдпрд╛.

Thread.interrupt()

рдЧреЛрд╖реНрдЯ рдЕрд╢реА рдЖрд╣реЗ рдХреА рдзрд╛рдЧрд╛ рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЕрд╕рддрд╛рдирд╛/рдЭреЛрдкреЗрдд рдЕрд╕рддрд╛рдирд╛, рдХреЛрдгреАрддрд░реА рд╡реНрдпрддреНрдпрдп рдЖрдгреВ рдЗрдЪреНрдЫрд┐рддреЛ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдореНрд╣реА рдПрдХ рд╣рд╛рддрд╛рд│рддреЛ InterruptedException. рд╣реА Thread.stop()рдкрджреНрдзрдд рдХрд╛рд▓рдмрд╛рд╣реНрдп, рдореНрд╣рдгрдЬреЗ рдХрд╛рд▓рдмрд╛рд╣реНрдп рдЖрдгрд┐ рдЕрдирд┐рд╖реНрдЯ рдШреЛрд╖рд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рд╣реА рдпрдВрддреНрд░рдгрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реА. рдХрд╛рд░рдг рдЕрд╕реЗ рдХреА рдЬреЗрд╡реНрд╣рд╛ stop()рдкрджреНрдзрдд рдХреЙрд▓ рдХреЗрд▓реА рдЧреЗрд▓реА рддреЗрд╡реНрд╣рд╛ рдзрд╛рдЧрд╛ рдлрдХреНрдд "рдорд╛рд░рд▓рд╛" рд╣реЛрддрд╛, рдЬреЛ рдЦреВрдк рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛрддрд╛. рдереНрд░реЗрдб рдХреЗрд╡реНрд╣рд╛ рдерд╛рдВрдмрд╡рд▓рд╛ рдЬрд╛рдИрд▓ рд╣реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд│реВ рд╢рдХрд▓реЗ рдирд╛рд╣реА рдЖрдгрд┐ рдЖрдореНрд╣реА рдбреЗрдЯрд╛рдЪреНрдпрд╛ рд╕реБрд╕рдВрдЧрддрддреЗрдЪреА рд╣рдореА рджреЗрдК рд╢рдХрдд рдирд╛рд╣реА. рдХрд▓реНрдкрдирд╛ рдХрд░рд╛ рдХреА рдереНрд░реЗрдб рдорд╛рд░рд▓рд╛ рдЬрд╛рдд рдЕрд╕рддрд╛рдирд╛ рддреБрдореНрд╣реА рдлрд╛рдЗрд▓рд╡рд░ рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рдд рдЖрд╣рд╛рдд. рдзрд╛рдЧрд╛ рдорд╛рд░рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╡рд╛рдЪреНрдпрд╛ рдирд┐рд░реНрдорд╛рддреНрдпрд╛рдВрдиреА рдард░рд╡рд▓реЗ рдХреА рддреНрдпрд╛рдд рд╡реНрдпрддреНрдпрдп рдЖрдгрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ рд╣реЗ рд╕рд╛рдВрдЧрдгреЗ рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рдЖрд╣реЗ. рдпрд╛ рдорд╛рд╣рд┐рддреАрд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдХрд╕рд╛ рджреНрдпрд╛рдпрдЪрд╛ рд╣рд╛ рдзрд╛рдЧреНрдпрд╛рдиреЗрдЪ рдард░рд╡рд╛рдпрдЪрд╛ рд╡рд┐рд╖рдп рдЖрд╣реЗ. рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╛рдВрд╕рд╛рдареА, Thread.stop рдирд╛рдкрд╕рдВрдд рдХрд╛ рдЖрд╣реЗ?рдУрд░реЕрдХрд▓рдЪреНрдпрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░. рдЪрд▓рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ:
public static void main(String []args) {
	Runnable task = () -> {
		try {
			TimeUnit.SECONDS.sleep(60);
		} catch (InterruptedException e) {
			System.out.println("Interrupted");
		}
	};
	Thread thread = new Thread(task);
	thread.start();
	thread.interrupt();
}
рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдореНрд╣реА 60 рд╕реЗрдХрдВрдж рдерд╛рдВрдмрдгрд╛рд░ рдирд╛рд╣реА. рддреНрдпрд╛рдРрд╡рдЬреА, рдЖрдореНрд╣реА рддреНрд╡рд░рд┐рдд "рд╡реНрдпрддреНрдпрдп" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВ. рдХрд╛рд░рдг рдЖрдореНрд╣реА interrupt()рдереНрд░реЗрдбрд╡рд░ рдкрджреНрдзрдд рдореНрд╣рдЯрд▓реЗ рдЖрд╣реЗ. рд╣реА рдкрджреНрдзрдд "рдЗрдВрдЯрд░рдкреНрдЯ рд╕реНрдЯреЗрдЯрд╕" рдирд╛рд╡рд╛рдЪрд╛ рдЕрдВрддрд░реНрдЧрдд рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рддреЗ. рдореНрд╣рдгрдЬреЗрдЪ, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдбрдордзреНрдпреЗ рдПрдХ рдЕрдВрддрд░реНрдЧрдд рдзреНрд╡рдЬ рдЖрд╣реЗ рдЬреЛ рдереЗрдЯ рдкреНрд░рд╡реЗрд╢рдпреЛрдЧреНрдп рдирд╛рд╣реА. рдкрд░рдВрддреБ рдпрд╛ рдзреНрд╡рдЬрд╛рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╕реНрдерд╛рдирд┐рдХ рдкрджреНрдзрддреА рдЖрд╣реЗрдд. рдкрдг рд╣рд╛ рдПрдХрдореЗрд╡ рдорд╛рд░реНрдЧ рдирд╛рд╣реА. рдПрдХ рдзрд╛рдЧрд╛ рдЪрд╛рд▓реВ рдЕрд╕реВ рд╢рдХрддреЛ, рдХрд╢рд╛рдЪреАрд╣реА рд╡рд╛рдЯ рдкрд╛рд╣рдд рдирд╛рд╣реА, рдлрдХреНрдд рдХреНрд░рд┐рдпрд╛ рдХрд░рдд рдЖрд╣реЗ. рдкрд░рдВрддреБ рдЗрддрд░рд╛рдВрдирд╛ рддреНрдпрд╛рдЪреЗ рдХрд╛рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрд│реА рд╕рдВрдкрд╡рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рдЕрд╕рд╛ рдЕрдВрджрд╛рдЬ рдЕрд╕реВ рд╢рдХрддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:
public static void main(String []args) {
	Runnable task = () -> {
		while(!Thread.currentThread().isInterrupted()) {
			// Do some work
		}
		System.out.println("Finished");
	};
	Thread thread = new Thread(task);
	thread.start();
	thread.interrupt();
}
рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ, whileрдереНрд░реЗрдб рдмрд╛рд╣реЗрд░реВрди рд╡реНрдпрддреНрдпрдп рдпреЗрдИрдкрд░реНрдпрдВрдд рд▓реВрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдзреНрд╡рдЬрд╛рд╕рд╛рдареА isInterrupted, рд╣реЗ рдЬрд╛рдгреВрди рдШреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рдХреА рдЬрд░ рдЖрдкрдг рдПрдЦрд╛рджреЗ рдкрдХрдбрд▓реЗ рддрд░ InterruptedException, isInterrupted рдзреНрд╡рдЬ рд░реАрд╕реЗрдЯ рд╣реЛрдИрд▓ рдЖрдгрд┐ рдирдВрддрд░ isInterrupted()рдЦреЛрдЯрд╛ рдкрд░рдд рдпреЗрдИрд▓. рдереНрд░реЗрдб рдХреНрд▓рд╛рд╕рдордзреНрдпреЗ рд╕реНрдерд┐рд░ Thread.interrupted() рдкрджреНрдзрдд рджреЗрдЦреАрд▓ рдЖрд╣реЗ рдЬреА рдлрдХреНрдд рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдбрд╡рд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ, рдкрд░рдВрддреБ рд╣реА рдкрджреНрдзрдд рдлреНрд▓реЕрдЧрд▓рд╛ рдЕрд╕рддреНрдп рд╡рд░ рд░реАрд╕реЗрдЯ рдХрд░рддреЗ! рдереНрд░реЗрдб рдЗрдВрдЯрд░рдкреНрд╢рди рд╢реАрд░реНрд╖рдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдордзреНрдпреЗ рдЕрдзрд┐рдХ рд╡рд╛рдЪрд╛ .

рд╕рд╛рдореАрд▓ рд╡реНрд╣рд╛ (рджреБрд╕рд░рд╛ рдереНрд░реЗрдб рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛)

рджреБрд╕рд░рд╛ рдзрд╛рдЧрд╛ рд╕рдВрдкрдгреНрдпрд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдгреНрдпрд╛рдЪрд╛ рд╕реЛрдкрд╛ рдкреНрд░рдХрд╛рд░.
public static void main(String []args) throws InterruptedException {
	Runnable task = () -> {
		try {
			TimeUnit.SECONDS.sleep(5);
		} catch (InterruptedException e) {
			System.out.println("Interrupted");
		}
	};
	Thread thread = new Thread(task);
	thread.start();
	thread.join();
	System.out.println("Finished");
}
рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдирд╡реАрди рдереНрд░реЗрдб 5 рд╕реЗрдХрдВрдж рдЭреЛрдкреЗрд▓. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдЭреЛрдкрд▓реЗрд▓рд╛ рдзрд╛рдЧрд╛ рдЬрд╛рдЧреЗ рд╣реЛрдИрдкрд░реНрдпрдВрдд рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рд╣реЛрдИрдкрд░реНрдпрдВрдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрд▓. рдЬрд░ рддреБрдореНрд╣реА JVisualVM рдордзреАрд▓ рдереНрд░реЗрдбрдЪреА рд╕реНрдерд┐рддреА рдкрд╛рд╣рд┐рд▓реА рддрд░ рддреЗ рдЕрд╕реЗ рджрд┐рд╕реЗрд▓: рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - 4рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдЯреВрд▓реНрд╕рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рддреБрдореНрд╣реА рдереНрд░реЗрдбрдордзреНрдпреЗ рдХрд╛рдп рдЪрд╛рд▓рд▓реЗ рдЖрд╣реЗ рддреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛. рдкрджреНрдзрдд joinрдЕрдЧрджреА рд╕реЛрдкреА рдЖрд╣реЗ, рдХрд╛рд░рдг рд╣реА рдлрдХреНрдд Java рдХреЛрдб рдЕрд╕рд▓реЗрд▓реА рдПрдХ рдкрджреНрдзрдд рдЖрд╣реЗ рдЬреА wait()рдЬреНрдпрд╛ рдереНрд░реЗрдбрд╡рд░ рдореНрд╣рдгрддрд╛рдд рддреЛ рдЬрд┐рд╡рдВрдд рдЖрд╣реЗ рддреЛрдкрд░реНрдпрдВрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ. рдзрд╛рдЧрд╛ рдорд░рддрд╛рдЪ (рдЬреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдЪреЗ рдХрд╛рдо рдкреВрд░реНрдг рд╣реЛрддреЗ), рдкреНрд░рддреАрдХреНрд╖рд╛ рд╡реНрдпрддреНрдпрдп рдЖрдгрд▓реА рдЬрд╛рддреЗ. рдЖрдгрд┐ рд╣реАрдЪ рдкрджреНрдзрддреАрдЪреА рдЬрд╛рджреВ рдЖрд╣реЗ join(). рддрд░, рдЪрд▓рд╛ рд╕рд░реНрд╡рд╛рдд рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯреАрдХрдбреЗ рдЬрд╛рдКрдпрд╛.

рдореЙрдирд┐рдЯрд░

рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧрдордзреНрдпреЗ рдореЙрдирд┐рдЯрд░рдЪреА рд╕рдВрдХрд▓реНрдкрдирд╛ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ. рдореЙрдирд┐рдЯрд░ рд╣рд╛ рд╢рдмреНрдж рдЗрдВрдЧреНрд░рдЬреАрдд 16рд╡реНрдпрд╛ рд╢рддрдХрд╛рддреАрд▓ рд▓реЕрдЯрд┐рди рднрд╛рд╖реЗрдд рдпреЗрддреЛ рдЖрдгрд┐ рдпрд╛рдЪрд╛ рдЕрд░реНрде "рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг, рддрдкрд╛рд╕рдгреА рдХрд┐рдВрд╡рд╛ рд╕рддрдд рд░реЗрдХреЙрд░реНрдб рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рд╕рд╛рдзрди рдХрд┐рдВрд╡рд╛ рдЙрдкрдХрд░рдг" рдЕрд╕рд╛ рд╣реЛрддреЛ. рдпрд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд, рдЖрдореНрд╣реА рдореВрд▓рднреВрдд рдЧреЛрд╖реНрдЯреА рдХрд╡реНрд╣рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ. рдЬреНрдпрд╛рдВрдирд╛ рддрдкрд╢реАрд▓ рд╣рд╡реЗ рдЖрд╣реЗрдд, рдХреГрдкрдпрд╛ рд▓рд┐рдВрдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд╛рдордЧреНрд░реАрдордзреНрдпреЗ рдЬрд╛. рдЖрдореНрд╣реА рдЬрд╛рд╡рд╛ рд▓рдБрдЧреНрд╡реЗрдЬ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди (JLS): 17.1 рд╕рд╣ рдЖрдордЪрд╛ рдкреНрд░рд╡рд╛рд╕ рд╕реБрд░реВ рдХрд░рддреЛ. рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди . рд╣реЗ рдЦрд╛рд▓реАрд▓ рдореНрд╣рдгрддреЗ: рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - 5рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдЬрд╛рд╡рд╛ рдереНрд░реЗрдбреНрд╕ рджрд░рдореНрдпрд╛рди рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рдирд╕рд╛рдареА "рдореЙрдирд┐рдЯрд░" рдпрдВрддреНрд░рдгрд╛ рд╡рд╛рдкрд░рддреЗ. рдореЙрдирд┐рдЯрд░ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рддреЛ рдЖрдгрд┐ рдереНрд░реЗрдбреНрд╕ рддреЗ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛рдд lock()рдХрд┐рдВрд╡рд╛ рд╕реЛрдмрдд рд╕реЛрдбреВ рд╢рдХрддрд╛рдд unlock(). рдкреБрдвреЗ, рдЖрдореНрд╣реА рдУрд░реЕрдХрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╢реЛрдзреВ: рдЖрдВрддрд░рд┐рдХ рд▓реЙрдХ рдЖрдгрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди. рд╣реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореНрд╣рдгрддреЗ рдХреА Java рдЪреЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рдПрдХрд╛ рдЕрдВрддрд░реНрдЧрдд рдШрдЯрдХрд╛рднреЛрд╡рддреА рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ рдЬреНрдпрд╛рд▓рд╛ рдЖрдВрддрд░рд┐рдХ рд▓реЙрдХ рдХрд┐рдВрд╡рд╛ рдореЙрдирд┐рдЯрд░ рд▓реЙрдХ рдореНрд╣рдгрддрд╛рдд . рдпрд╛ рд▓реЙрдХрд▓рд╛ рд╕рд╣рд╕рд╛ " рдореЙрдирд┐рдЯрд░ " рдореНрд╣рдЯрд▓реЗ рдЬрд╛рддреЗ. рдЖрдкрдг рд╣реЗ рджреЗрдЦреАрд▓ рдкрд╛рд╣рддреЛ рдХреА Java рдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯрд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдЖрдВрддрд░рд┐рдХ рд▓реЙрдХ рдЖрд╣реЗ. рддреБрдореНрд╣реА Java - Intrinsic Locks рдЖрдгрд┐ Synchronization рд╡рд╛рдЪреВ рд╢рдХрддрд╛ . рдкреБрдвреЗ рдЬрд╛рд╡рд╛рдордзреАрд▓ рдПрдЦрд╛рджреА рд╡рд╕реНрддреВ рдореЙрдирд┐рдЯрд░рд╢реА рдХрд╢реА рдЬреЛрдбрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ. Java рдордзреНрдпреЗ, рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдПрдХ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЕрд╕рддреЛ рдЬреЛ рдХреЛрдбрдордзреАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдирд╕рд▓реЗрд▓рд╛ рдЕрдВрддрд░реНрдЧрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ, рдкрд░рдВрддреБ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд╕рд╣ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ. рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдордзреНрдпреЗ "рдорд╛рд░реНрдХ рд╢рдмреНрдж" рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдЬреЛ рдпрд╛рд╕рд╛рд░рдЦрд╛ рджрд┐рд╕рддреЛ: рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - 6

https://edu.netbeans.org/contrib/slides/java-overview-and-java-se6.pdf

рдпреЗрдереЗ рдПрдХ JavaWorld рд▓реЗрдЦ рдЖрд╣реЗ рдЬреЛ рдЦреВрдк рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ: Java рдЖрднрд╛рд╕реА рдорд╢реАрди рдереНрд░реЗрдб рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рдХрд╕реЗ рдХрд░рддреЗ . рд╣рд╛ рд▓реЗрдЦ JDK рдмрдЧ-рдЯреНрд░реЕрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдордордзреАрд▓ рдЦрд╛рд▓реАрд▓ рд╕рдорд╕реНрдпреЗрдЪреНрдпрд╛ "рд╕рд╛рд░рд╛рдВрд╢" рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рд╡рд░реНрдгрдирд╛рд╕рд╣ рдПрдХрддреНрд░ рдХреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ: JDK-8183909 . рддреБрдореНрд╣реА рддреАрдЪ рдЧреЛрд╖реНрдЯ рдЗрдереЗ рд╡рд╛рдЪреВ рд╢рдХрддрд╛: JEP-8183909 . рддрд░, Java рдордзреНрдпреЗ, рдореЙрдирд┐рдЯрд░ рдПрдЦрд╛рджреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рддреЛ рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рдереНрд░реЗрдб рд▓реЙрдХ рдорд┐рд│рд╡рдгреНрдпрд╛рдЪрд╛ (рдХрд┐рдВрд╡рд╛ рдорд┐рд│рд╡рдгреНрдпрд╛рдЪрд╛) рдкреНрд░рдпрддреНрди рдХрд░рддреЛ рддреЗрд╡реНрд╣рд╛ рдереНрд░реЗрдб рдмреНрд▓реЙрдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ. рдпреЗрдереЗ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреЗ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ:
public class HelloWorld{
    public static void main(String []args){
        Object object = new Object();
        synchronized(object) {
            System.out.println("Hello World");
        }
    }
}
рдпреЗрдереЗ, рд╕рдзреНрдпрд╛рдЪрд╛ рдереНрд░реЗрдб (рдЬреНрдпрд╛ рдХреЛрдбрдЪреНрдпрд╛ рдпрд╛ рдУрд│реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рддреЛ) synchronizedрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдирд┐рдЯрд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреАрд╡рд░реНрдб рд╡рд╛рдкрд░рддреЛ.object"\рд▓реЙрдХ рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА/рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓. рдЬрд░ рдЗрддрд░ рдХреЛрдгреАрд╣реА рдореЙрдирд┐рдЯрд░рд╕рд╛рдареА рд╡рд┐рд╡рд╛рдж рдХрд░рдд рдирд╕реЗрд▓ (рдореНрд╣рдгрдЬреЗ рд╕рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд░реВрди рдЗрддрд░ рдХреЛрдгреАрд╣реА рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реЗрд▓рд╛ рдХреЛрдб рдЪрд╛рд▓рд╡рдд рдирд╕реЗрд▓), рддрд░ Java "рдмрд╛рдпрд╕реНрдб рд▓реЙрдХрд┐рдВрдЧ" рдирд╛рд╡рд╛рдЪреЗ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрддреЗ. рд╕рдВрдмрдВрдзрд┐рдд рдЯреЕрдЧ рдЖрдгрд┐ рдореЙрдирд┐рдЯрд░рдЪреЗ рд▓реЙрдХ рдХреЛрдгрддреНрдпрд╛ рдереНрд░реЗрдбрдЪреНрдпрд╛ рдорд╛рд▓рдХреАрдЪреЗ рдЖрд╣реЗ рдпрд╛рдЪреА рдиреЛрдВрдж рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдордзреАрд▓ рдЪрд┐рдиреНрд╣ рд╢рдмреНрджрд╛рдд рдЬреЛрдбрд▓реА рдЬрд╛рддреЗ. рд╣реЗ рдореЙрдирд┐рдЯрд░ рд▓реЙрдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдУрд╡реНрд╣рд░рд╣реЗрдб рдХрдореА рдХрд░рддреЗ. рдЬрд░ рдореЙрдирд┐рдЯрд░ рдкреВрд░реНрд╡реА рджреБрд╕рд░реНрдпрд╛ рдереНрд░реЗрдбрдЪреНрдпрд╛ рдорд╛рд▓рдХреАрдЪрд╛ рдЕрд╕реЗрд▓ рддрд░ рдЕрд╕реЗ рд▓реЙрдХрд┐рдВрдЧ рдкреБрд░реЗрд╕реЗ рдирд╛рд╣реА. JVM рдкреБрдвреАрд▓ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд▓реЙрдХрд┐рдВрдЧрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ: "рдореВрд▓рднреВрдд рд▓реЙрдХрд┐рдВрдЧ". рд╣реЗ рддреБрд▓рдирд╛-рдЖрдгрд┐-рд╕реНрд╡реЕрдк (CAS) рдСрдкрд░реЗрд╢рдиреНрд╕ рд╡рд╛рдкрд░рддреЗ. рдЗрддрдХреЗрдЪ рдХрд╛рдп, рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдЪрд╛ рдорд╛рд░реНрдХ рд╢рдмреНрдж рдпрд╛рдкреБрдвреЗ рдорд╛рд░реНрдХ рд╢рдмреНрдж рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдд рдирд╛рд╣реА, рддрд░ рддреЛ рдХреБрдареЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ рдпрд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЛ рдЖрдгрд┐ рдЯреЕрдЧ рдмрджрд▓рддреЛ рдЬреЗрдгреЗрдХрд░реВрди JVM рд▓рд╛ рд╕рдордЬреЗрд▓ рдХреА рдЖрдкрдг рдореВрд▓рднреВрдд рд▓реЙрдХрд┐рдВрдЧ рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд. рдЬрд░ рдПрдХрд╛рдзрд┐рдХ рдереНрд░реЗрдбреНрд╕ рдореЙрдирд┐рдЯрд░рд╕рд╛рдареА рд╕реНрдкрд░реНрдзрд╛ (рд╡рд╛рдж) рдХрд░рдд рдЕрд╕рддреАрд▓ (рдПрдХрд╛рдиреЗ рд▓реЙрдХ рдорд┐рд│рд╡рд▓рд╛ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рджреБрд╕рд░рд╛ рд▓реЙрдХ рд░рд┐рд▓реАрдЭ рд╣реЛрдгреНрдпрд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЕрд╕реЗрд▓), рддрд░ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рддреАрд▓ рдЯреЕрдЧ рдмрджрд▓рддреЛ рдЖрдгрд┐ рдорд╛рд░реНрдХ рд╢рдмреНрдж рдЖрддрд╛ рдореЙрдирд┐рдЯрд░рдЪрд╛ рд╕рдВрджрд░реНрдн рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ. рдСрдмреНрдЬреЗрдХреНрдЯ рдореНрд╣рдгреВрди - JVM рдЪреЗ рдХрд╛рд╣реА рдЕрдВрддрд░реНрдЧрдд рдЕрд╕реНрддрд┐рддреНрд╡. JDK Enchancement Proposal (JEP) рдордзреНрдпреЗ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрд▓рд╛ рд╣реА рд╕рдВрд╕реНрдерд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЗрдорд░реАрдЪреНрдпрд╛ рдиреЗрдЯрд┐рд╡реНрд╣ рд╣реАрдк рднрд╛рдЧрд╛рдд рдЬрд╛рдЧрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдШрдЯрдХрд╛рдЪреНрдпрд╛ рдореЗрдорд░реА рд╕реНрдерд╛рдирд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдЪреНрдпрд╛ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдореЙрдирд┐рдЯрд░ рд╣реА рдЦрд░реЛрдЦрд░рдЪ рдПрдХрд╛рдзрд┐рдХ рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рд╕рдордХреНрд░рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ. JVM рдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреНрдпрд╛ рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджрд░рдореНрдпрд╛рди рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ. рддрд░, рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдореЙрдирд┐рдЯрд░рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЕрд╕рддрд╛рдирд╛, рдЖрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд▓реЙрдХрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд. рдЖрдгрд┐ рдПрдХ рд╕реЗрдХрдВрдж рд▓реЙрдХ рд░рд┐рд▓реАрдЭ рд╣реЛрдгреНрдпрд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЖрд╣реЗ), рддреНрдпрд╛рдирдВрддрд░ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рддреАрд▓ рдЯреЕрдЧ рдмрджрд▓рддреЛ рдЖрдгрд┐ рдорд╛рд░реНрдХ рд╢рдмреНрдж рдЖрддрд╛ рдореЙрдирд┐рдЯрд░рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рдореНрд╣рдгреВрди рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ тАФ JVM рдЪреЗ рдХрд╛рд╣реА рдЕрдВрддрд░реНрдЧрдд рдЕрд╕реНрддрд┐рддреНрд╡. JDK Enchancement Proposal (JEP) рдордзреНрдпреЗ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрд▓рд╛ рд╣реА рд╕рдВрд╕реНрдерд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЗрдорд░реАрдЪреНрдпрд╛ рдиреЗрдЯрд┐рд╡реНрд╣ рд╣реАрдк рднрд╛рдЧрд╛рдд рдЬрд╛рдЧрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдШрдЯрдХрд╛рдЪреНрдпрд╛ рдореЗрдорд░реА рд╕реНрдерд╛рдирд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдЪреНрдпрд╛ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдореЙрдирд┐рдЯрд░ рд╣реА рдЦрд░реЛрдЦрд░рдЪ рдПрдХрд╛рдзрд┐рдХ рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рд╕рдордХреНрд░рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ. JVM рдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреНрдпрд╛ рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджрд░рдореНрдпрд╛рди рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ. рддрд░, рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдореЙрдирд┐рдЯрд░рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЕрд╕рддрд╛рдирд╛, рдЖрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд▓реЙрдХрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд. рдЖрдгрд┐ рдПрдХ рд╕реЗрдХрдВрдж рд▓реЙрдХ рд░рд┐рд▓реАрдЭ рд╣реЛрдгреНрдпрд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЖрд╣реЗ), рддреНрдпрд╛рдирдВрддрд░ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рддреАрд▓ рдЯреЕрдЧ рдмрджрд▓рддреЛ рдЖрдгрд┐ рдорд╛рд░реНрдХ рд╢рдмреНрдж рдЖрддрд╛ рдореЙрдирд┐рдЯрд░рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рдореНрд╣рдгреВрди рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ тАФ JVM рдЪреЗ рдХрд╛рд╣реА рдЕрдВрддрд░реНрдЧрдд рдЕрд╕реНрддрд┐рддреНрд╡. JDK Enchancement Proposal (JEP) рдордзреНрдпреЗ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрд▓рд╛ рд╣реА рд╕рдВрд╕реНрдерд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЗрдорд░реАрдЪреНрдпрд╛ рдиреЗрдЯрд┐рд╡реНрд╣ рд╣реАрдк рднрд╛рдЧрд╛рдд рдЬрд╛рдЧрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдШрдЯрдХрд╛рдЪреНрдпрд╛ рдореЗрдорд░реА рд╕реНрдерд╛рдирд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдЪреНрдпрд╛ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдореЙрдирд┐рдЯрд░ рд╣реА рдЦрд░реЛрдЦрд░рдЪ рдПрдХрд╛рдзрд┐рдХ рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рд╕рдордХреНрд░рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ. JVM рдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреНрдпрд╛ рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджрд░рдореНрдпрд╛рди рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ. рддрд░, рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдореЙрдирд┐рдЯрд░рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЕрд╕рддрд╛рдирд╛, рдЖрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд▓реЙрдХрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд. рдЖрдгрд┐ рдорд╛рд░реНрдХ рд╢рдмреНрдж рдЖрддрд╛ рдореЙрдирд┐рдЯрд░рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рдореНрд╣рдгреВрди рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ тАФ JVM рдЪреЗ рдХрд╛рд╣реА рдЕрдВрддрд░реНрдЧрдд рдЕрд╕реНрддрд┐рддреНрд╡. JDK Enchancement Proposal (JEP) рдордзреНрдпреЗ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрд▓рд╛ рд╣реА рд╕рдВрд╕реНрдерд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЗрдорд░реАрдЪреНрдпрд╛ рдиреЗрдЯрд┐рд╡реНрд╣ рд╣реАрдк рднрд╛рдЧрд╛рдд рдЬрд╛рдЧрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдШрдЯрдХрд╛рдЪреНрдпрд╛ рдореЗрдорд░реА рд╕реНрдерд╛рдирд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдЪреНрдпрд╛ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдореЙрдирд┐рдЯрд░ рд╣реА рдЦрд░реЛрдЦрд░рдЪ рдПрдХрд╛рдзрд┐рдХ рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рд╕рдордХреНрд░рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ. JVM рдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреНрдпрд╛ рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджрд░рдореНрдпрд╛рди рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ. рддрд░, рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдореЙрдирд┐рдЯрд░рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЕрд╕рддрд╛рдирд╛, рдЖрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд▓реЙрдХрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд. рдЖрдгрд┐ рдорд╛рд░реНрдХ рд╢рдмреНрдж рдЖрддрд╛ рдореЙрдирд┐рдЯрд░рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рдореНрд╣рдгреВрди рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ тАФ JVM рдЪреЗ рдХрд╛рд╣реА рдЕрдВрддрд░реНрдЧрдд рдЕрд╕реНрддрд┐рддреНрд╡. JDK Enchancement Proposal (JEP) рдордзреНрдпреЗ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрд▓рд╛ рд╣реА рд╕рдВрд╕реНрдерд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЗрдорд░реАрдЪреНрдпрд╛ рдиреЗрдЯрд┐рд╡реНрд╣ рд╣реАрдк рднрд╛рдЧрд╛рдд рдЬрд╛рдЧрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдШрдЯрдХрд╛рдЪреНрдпрд╛ рдореЗрдорд░реА рд╕реНрдерд╛рдирд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдЪреНрдпрд╛ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдореЙрдирд┐рдЯрд░ рд╣реА рдЦрд░реЛрдЦрд░рдЪ рдПрдХрд╛рдзрд┐рдХ рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рд╕рдордХреНрд░рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ. JVM рдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреНрдпрд╛ рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджрд░рдореНрдпрд╛рди рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ. рддрд░, рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдореЙрдирд┐рдЯрд░рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЕрд╕рддрд╛рдирд╛, рдЖрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд▓реЙрдХрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд. рдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдШрдЯрдХрд╛рдЪреНрдпрд╛ рдореЗрдорд░реА рд╕реНрдерд╛рдирд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдЪреНрдпрд╛ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдореЙрдирд┐рдЯрд░ рд╣реА рдЦрд░реЛрдЦрд░рдЪ рдПрдХрд╛рдзрд┐рдХ рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рд╕рдордХреНрд░рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ. JVM рдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреНрдпрд╛ рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджрд░рдореНрдпрд╛рди рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ. рддрд░, рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдореЙрдирд┐рдЯрд░рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЕрд╕рддрд╛рдирд╛, рдЖрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд▓реЙрдХрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд. рдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдШрдЯрдХрд╛рдЪреНрдпрд╛ рдореЗрдорд░реА рд╕реНрдерд╛рдирд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░рдЪреНрдпрд╛ рдорд╛рд░реНрдХ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдореЙрдирд┐рдЯрд░ рд╣реА рдЦрд░реЛрдЦрд░рдЪ рдПрдХрд╛рдзрд┐рдХ рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рд╕рдордХреНрд░рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ. JVM рдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреНрдпрд╛ рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджрд░рдореНрдпрд╛рди рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ. рддрд░, рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдореЙрдирд┐рдЯрд░рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЕрд╕рддрд╛рдирд╛, рдЖрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд▓реЙрдХрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд. рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - 7

рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ (рд▓реЙрдХрдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЖрд╣реЗ)

рдЖрдкрдг рдЖрдзреА рдкрд╛рд╣рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, "рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреНрдб рдмреНрд▓реЙрдХ" (рдХрд┐рдВрд╡рд╛ "рдЧрдВрднреАрд░ рд╡рд┐рднрд╛рдЧ") рд╣реА рд╕рдВрдХрд▓реНрдкрдирд╛ рдореЙрдирд┐рдЯрд░рдЪреНрдпрд╛ рд╕рдВрдХрд▓реНрдкрдиреЗрд╢реА рдЬрд╡рд│реВрди рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ. рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд╛:
public static void main(String[] args) throws InterruptedException {
	Object lock = new Object();

	Runnable task = () -> {
		synchronized(lock) {
			System.out.println("thread");
		}
	};

	Thread th1 = new Thread(task);
	th1.start();
	synchronized(lock) {
		for (int i = 0; i < 8; i++) {
			Thread.currentThread().sleep(1000);
			System.out.print(" " + i);
		}
		System.out.println(" ...");
	}
}
рдпреЗрдереЗ, рдореБрдЦреНрдп рдереНрд░реЗрдб рдкреНрд░рдердо рдЯрд╛рд╕реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯрд▓рд╛ рдирд╡реАрди рдереНрд░реЗрдбрд╡рд░ рдкрд╛рд╕ рдХрд░рддреЛ рдЖрдгрд┐ рдирдВрддрд░ рддрд╛рдмрдбрддреЛрдм рд▓реЙрдХ рдорд┐рд│рд╡рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╣ рджреАрд░реНрдШ рдСрдкрд░реЗрд╢рди рдХрд░рддреЛ (8 рд╕реЗрдХрдВрдж). рдпрд╛ рд╕рд░реНрд╡ рд╡реЗрд│реА, рдХрд╛рд░реНрдп рдкреБрдвреЗ рдЬрд╛рдгреНрдпрд╛рд╕ рдЕрдХреНрд╖рдо рдЖрд╣реЗ, рдХрд╛рд░рдг рддреЗ synchronizedрдмреНрд▓реЙрдХрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рд▓реЙрдХ рдЖрдзреАрдЪ рдЕрдзрд┐рдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЬрд░ рдереНрд░реЗрдб рд▓реЙрдХ рдорд┐рд│рд╡реВ рд╢рдХрдд рдирд╕реЗрд▓, рддрд░ рддреЛ рдореЙрдирд┐рдЯрд░рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрд▓. рд▓реЙрдХ рдорд┐рд│рддрд╛рдЪ рддреНрдпрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реБрд░реВ рд░рд╛рд╣реАрд▓. рдЬреЗрд╡реНрд╣рд╛ рдереНрд░реЗрдб рдореЙрдирд┐рдЯрд░рдордзреВрди рдмрд╛рд╣реЗрд░ рдкрдбрддреЛ рддреЗрд╡реНрд╣рд╛ рддреЛ рд▓реЙрдХ рд╕реЛрдбрддреЛ. JVisualVM рдордзреНрдпреЗ, рд╣реЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ: рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - 8рдЬрд╕реЗ рдЖрдкрдг JVisualVM рдордзреНрдпреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛, рд╕реНрдерд┐рддреА "рдореЙрдирд┐рдЯрд░" рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗ рдереНрд░реЗрдб рдЕрд╡рд░реЛрдзрд┐рдд рдЖрд╣реЗ рдЖрдгрд┐ рдореЙрдирд┐рдЯрд░ рдШреЗрдК рд╢рдХрдд рдирд╛рд╣реА. рддреБрдореНрд╣реА рдереНрд░реЗрдбрдЪреА рд╕реНрдерд┐рддреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рддреАрдЪреА рдирд╛рд╡реЗ JVisualVM рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдирд╛рд╡рд╛рдВрд╢реА рдЬреБрд│рдд рдирд╛рд╣реАрдд, рдЬрд░реА рддреЗ рд╕рдорд╛рди рдЖрд╣реЗрдд. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рджth1.getState()рдлреЙрд░ рд▓реВрдкрдордзреАрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ BLOCKED рдкрд░рдд рдХрд░реЗрд▓ , рдХрд╛рд░рдг рдЬреЛрдкрд░реНрдпрдВрдд рд▓реВрдк рдЪрд╛рд▓реВ рдЖрд╣реЗ, lockрдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рдореЙрдирд┐рдЯрд░ рдереНрд░реЗрдбрдиреЗ рд╡реНрдпрд╛рдкрд▓реЗрд▓рд╛ рдЕрд╕рддреЛ main, рдЖрдгрд┐ th1рдереНрд░реЗрдб рдмреНрд▓реЙрдХ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рд▓реЙрдХ рд░рд┐рд▓реАрдЭ рд╣реЛрдИрдкрд░реНрдпрдВрдд рдкреБрдвреЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА. рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмреНрд▓реЙрдХреНрд╕ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╕рдВрдкреВрд░реНрдг рдкрджреНрдзрдд рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡рд░реНрдЧрд╛рддреАрд▓ рдПрдХ рдкрджреНрдзрдд рдпреЗрдереЗ рдЖрд╣реЗ HashTable:
public synchronized int size() {
	return count;
}
рд╣реА рдкрджреНрдзрдд рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡реЗрд│реА рдХреЗрд╡рд│ рдПрдХрд╛ рдереНрд░реЗрдбрджреНрд╡рд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓. рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд░реЛрдЦрд░ рд▓реЙрдХрдЪреА рдЧрд░рдЬ рдЖрд╣реЗ рдХрд╛? рд╣реЛрдп, рдЖрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдЪреА рдЧрд░рдЬ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдг рдкрджреНрдзрддреАрдВрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, "рд╣реА" рдСрдмреНрдЬреЗрдХреНрдЯ (рд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ) рд▓реЙрдХ рдореНрд╣рдгреВрди рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдпреЗрдереЗ рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдЪрд░реНрдЪрд╛ рдЖрд╣реЗ: рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдмреНрд▓реЙрдХ рдРрд╡рдЬреА рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реА рдкрджреНрдзрдд рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдлрд╛рдпрджрд╛ рдЖрд╣реЗ рдХрд╛? . рдЬрд░ рдкрджреНрдзрдд рд╕реНрдЯреЕрдЯрд┐рдХ рдЕрд╕реЗрд▓, рддрд░ рд▓реЙрдХ "рд╣рд╛" рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╕реЗрд▓ (рдХрд╛рд░рдг рд╕реНрдЯреЕрдЯрд┐рдХ рдкрджреНрдзрддреАрд╕рд╛рдареА "рд╣рд╛" рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╛рд╣реА), рддрд░ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрд╕реЗрд▓ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, ) Integer.class.

рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛ (рдореЙрдирд┐рдЯрд░рдЪреА рд╡рд╛рдЯ рдкрд╣рд╛рдд рдЖрд╣реЗ). notify() рдЖрдгрд┐ notifyAll() рдкрджреНрдзрддреА

рдереНрд░реЗрдб рдХреНрд▓рд╛рд╕рдордзреНрдпреЗ рдЖрдгрдЦреА рдПрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдкрджреНрдзрдд рдЖрд╣реЗ рдЬреА рдореЙрдирд┐рдЯрд░рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ. рд╡рд┐рдкрд░реАрдд sleep()рдЖрдгрд┐ join(), рдпрд╛ рдкрджреНрдзрддреАрд▓рд╛ рдлрдХреНрдд рдореНрд╣рдЯрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА. рддреНрдпрд╛рдЪреЗ рдирд╛рд╡ рдЖрд╣реЗ wait(). waitрдореЙрдирд┐рдЯрд░рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯрд╡рд░ рд╣реА рдкрджреНрдзрдд рдХреЙрд▓ рдХреЗрд▓реА рдЬрд╛рддреЗ рдЬреНрдпрд╛рдЪреА рдЖрдкрдг рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ. рдЪрд▓рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ:
public static void main(String []args) throws InterruptedException {
	    Object lock = new Object();
	    // The task object will wait until it is notified via lock
	    Runnable task = () -> {
	        synchronized(lock) {
	            try {
	                lock.wait();
	            } catch(InterruptedException e) {
	                System.out.println("interrupted");
	            }
	        }
	        // After we are notified, we will wait until we can acquire the lock
	        System.out.println("thread");
	    };
	    Thread taskThread = new Thread(task);
	    taskThread.start();
        // We sleep. Then we acquire the lock, notify, and release the lock
	    Thread.currentThread().sleep(3000);
	    System.out.println("main");
	    synchronized(lock) {
	        lock.notify();
	    }
}
JVisualVM рдордзреНрдпреЗ, рд╣реЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ: рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - резрежрд╣реЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА wait()рдЖрдгрд┐ notify()рдкрджреНрдзрддреА рдпрд╛рдВрдЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд java.lang.Object. рдереНрд░реЗрдбрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдкрджреНрдзрддреА рд╡рд░реНрдЧрд╛рдд рдЖрд╣реЗрдд рд╣реЗ рд╡рд┐рдЪрд┐рддреНрд░ рд╡рд╛рдЯреВ рд╢рдХрддреЗ Object. рдкрдг рддреНрдпрд╛рдЪреЗ рдХрд╛рд░рдг рдЖрддрд╛ рд╕рдореЛрд░ рдЖрд▓реЗ рдЖрд╣реЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рдд рдЕрд╕реЗрд▓ рдХреА Java рдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯрд▓рд╛ рд╣реЗрдбрд░ рдЕрд╕рддреЗ. рд╣реЗрдбрд░рдордзреНрдпреЗ рдореЙрдирд┐рдЯрд░рдмрджреНрджрд▓рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╣, рдореНрд╣рдгрдЬреЗ рд▓реЙрдХрдЪреА рд╕реНрдерд┐рддреА рдпрд╛рд╕рд╣ рд╡рд┐рд╡рд┐рдз рд╣рд╛рдЙрд╕рдХреАрдкрд┐рдВрдЧ рдорд╛рд╣рд┐рддреА рдЕрд╕рддреЗ. рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рдВрд╡рд╛ рдХреНрд▓рд╛рд╕рдЪреЗ рдЙрджрд╛рд╣рд░рдг, JVM рдордзреАрд▓ рдЕрдВрддрд░реНрдЧрдд рдШрдЯрдХрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, рдЬреНрдпрд╛рд▓рд╛ рдЖрдВрддрд░рд┐рдХ рд▓реЙрдХ рдХрд┐рдВрд╡рд╛ рдореЙрдирд┐рдЯрд░ рдореНрд╣рдгрддрд╛рдд. рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ, рдЯрд╛рд╕реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯрд╕рд╛рдареА рдХреЛрдб рд╕реВрдЪрд┐рдд рдХрд░рддреЛ рдХреА рдЖрдореНрд╣реА рдСрдмреНрдЬреЗрдХреНрдЯрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдирд┐рдЯрд░рд╕рд╛рдареА рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реЗрд▓рд╛ рдмреНрд▓реЙрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ lock. рдЬрд░ рдЖрдореНрд╣реА рдпрд╛ рдореЙрдирд┐рдЯрд░рд╕рд╛рдареА рд▓реЙрдХ рдорд┐рд│рд╡рдгреНрдпрд╛рдд рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реЛ, рддрд░wait()рдЕрд╕реЗ рдореНрд╣рдгрддрд╛рдд. рдХрд╛рд░реНрдп рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгрд╛рд░рд╛ рдереНрд░реЗрдб рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рдореЙрдирд┐рдЯрд░ рд░рд┐рд▓реАрдЬ рдХрд░реЗрд▓ , рдкрд░рдВрддреБ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреНрдпрд╛ рдореЙрдирд┐рдЯрд░рдХрдбреВрди lockрд╕реВрдЪрдиреЗрдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдереНрд░реЗрдбрдЪреНрдпрд╛ рд░рд╛рдВрдЧреЗрдд рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрд▓ . lockрдереНрд░реЗрдбреНрд╕рдЪреНрдпрд╛ рдпрд╛ рд░рд╛рдВрдЧреЗрд▓рд╛ WAIT SET рдореНрд╣рдгрддрд╛рдд, рдЬреЛ рддреНрдпрд╛рдЪрд╛ рдЙрджреНрджреЗрд╢ рдЕрдзрд┐рдХ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддреЛ. рдореНрд╣рдгрдЬреЗрдЪ, рд╣реЗ рд░рд╛рдВрдЧреЗрдкреЗрдХреНрд╖рд╛ рдПрдХ рд╕рдВрдЪ рдЕрдзрд┐рдХ рдЖрд╣реЗ. рдереНрд░реЗрдб mainрдЯрд╛рд╕реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯрд╕рд╣ рдПрдХ рдирд╡реАрди рдереНрд░реЗрдб рддрдпрд╛рд░ рдХрд░рддреЛ, рддреЛ рд╕реБрд░реВ рдХрд░рддреЛ рдЖрдгрд┐ 3 рд╕реЗрдХрдВрдж рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЛ. рдпрд╛рдореБрд│реЗ рдирд╡реАрди рдереНрд░реЗрдб рдереНрд░реЗрдбрдЪреНрдпрд╛ рдЖрдзреА рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓ mainрдЖрдгрд┐ рдореЙрдирд┐рдЯрд░рдЪреНрдпрд╛ рд░рд╛рдВрдЧреЗрдд рдЬрд╛рдгреНрдпрд╛рдЪреА рджрд╛рдЯ рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗ. рддреНрдпрд╛рдирдВрддрд░, mainрдереНрд░реЗрдб рд╕реНрд╡рддрдГ lockрдСрдмреНрдЬреЗрдХреНрдЯрдЪреНрдпрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдмреНрд▓реЙрдХрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЛ рдЖрдгрд┐ рдореЙрдирд┐рдЯрд░ рд╡рд╛рдкрд░реВрди рдереНрд░реЗрдб рд╕реВрдЪрдирд╛ рдХрд░рддреЛ. рд╕реВрдЪрдирд╛ рдкрд╛рдард╡рд▓реНрдпрд╛рдирдВрддрд░, mainрдереНрд░реЗрдб рд░рд┐рд▓реАрдЭ рдХрд░рддреЛlockрдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рдореЙрдирд┐рдЯрд░, рдЖрдгрд┐ рдирд╡реАрди рдереНрд░реЗрдб, рдЬреЛ рдкреВрд░реНрд╡реА lockрдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рдореЙрдирд┐рдЯрд░ рд░рд┐рд▓реАрдЬ рд╣реЛрдгреНрдпрд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдд рд╣реЛрддрд╛, рддреНрдпрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реБрд░реВ рдареЗрд╡рддреЗ. notify()рдХреЗрд╡рд│ рдПрдХрд╛ рдереНрд░реЗрдбрд╡рд░ ( ) рдХрд┐рдВрд╡рд╛ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд░рд╛рдВрдЧреЗрддреАрд▓ рд╕рд░реНрд╡ рдереНрд░реЗрдбрд╡рд░ рд╕реВрдЪрдирд╛ рдкрд╛рдард╡рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ ( notifyAll()). рдпреЗрдереЗ рдЕрдзрд┐рдХ рд╡рд╛рдЪрд╛: Java рдордзреАрд▓ notify() рдЖрдгрд┐ notifyAll() рдордзреАрд▓ рдлрд░рдХ . рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рдХреА рд╕реВрдЪрдирд╛ рдСрд░реНрдбрд░ JVM рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд╢реА рдХреЗрд▓реА рдЬрд╛рддреЗ рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ. рдпреЗрдереЗ рдЕрдзрд┐рдХ рд╡рд╛рдЪрд╛: рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЖрдгрд┐ рд╕рд░реНрд╡ рд╕реВрдЪрд┐рдд рдХрд░реВрди рдЙрдкрд╛рд╕рдорд╛рд░ рдХрд╢реА рд╕реЛрдбрд╡рд╛рдпрдЪреА? . рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдХреЛрдбрдЪреНрдпрд╛ рдПрдХрд╛ рдмреНрд▓реЙрдХрдРрд╡рдЬреА рд╕рдВрдкреВрд░реНрдг рдкрджреНрдзрдд рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХреЗрд▓реНрдпрд╛рд╡рд░ рддреБрдореНрд╣реА рд╣реЗ рдХрд░реВ рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕реНрдЯреЕрдЯрд┐рдХ рдкрджреНрдзрддреАрдВрд╕рд╛рдареА, рд▓реЙрдХ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрд╕реЗрд▓ (рдпрд╛рджреНрд╡рд╛рд░реЗ рдкреНрд░рд╛рдкреНрдд .class):
public static synchronized void printA() {
	System.out.println("A");
}
public static void printB() {
	synchronized(HelloWorld.class) {
		System.out.println("B");
	}
}
рд▓реЙрдХ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рджреЛрдиреНрд╣реА рдкрджреНрдзрддреА рд╕рдорд╛рди рдЖрд╣реЗрдд. рдЬрд░ рдкрджреНрдзрдд рд╕реНрдерд┐рд░ рдирд╕реЗрд▓, рддрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рдЪрд╛рд▓реВ рд╡рд╛рдкрд░реВрди рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ instance, рдореНрд╣рдгрдЬреЗрдЪ рд╡рд╛рдкрд░реВрди this. рддрд╕реЗ, рдЖрдореНрд╣реА рдЖрдзреА рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рд╣реЛрддреЗ рдХреА рддреБрдореНрд╣реА getState()рдереНрд░реЗрдбрдЪреА рд╕реНрдерд┐рддреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдкрджреНрдзрдд рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдореЙрдирд┐рдЯрд░рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд░рд╛рдВрдЧреЗрддреАрд▓ рдереНрд░реЗрдбрд╕рд╛рдареА, рдкрджреНрдзрддреАрдиреЗ wait()рдХрд╛рд▓рдмрд╛рд╣реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реНрдпрд╛рд╕, рд╕реНрдерд┐рддреА WAITING рдХрд┐рдВрд╡рд╛ TIMED_WAITING рдЕрд╕реЗрд▓. рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - 11

https://stackoverflow.com/questions/36425942/what-is-the-lifecycle-of-thread-in-java

рдзрд╛рдЧрд╛ рдЬреАрд╡рди рдЪрдХреНрд░

рддреНрдпрд╛рдЪреНрдпрд╛ рдЖрдпреБрд╖реНрдпрд╛рджрд░рдореНрдпрд╛рди, рдзрд╛рдЧреНрдпрд╛рдЪреА рд╕реНрдерд┐рддреА рдмрджрд▓рддреЗ. рдЦрд░рдВ рддрд░, рдпрд╛ рдмрджрд▓рд╛рдВрдордзреНрдпреЗ рдзрд╛рдЧреНрдпрд╛рдЪреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдЕрд╕рддреЗ. рдзрд╛рдЧрд╛ рддрдпрд╛рд░ рд╣реЛрддрд╛рдЪ рддреНрдпрд╛рдЪреА рд╕реНрдерд┐рддреА рдирд╡реАрди рдЕрд╕рддреЗ. рдпрд╛ рд╕реНрдерд┐рддреАрдд, рдирд╡реАрди рдереНрд░реЗрдб рдЕрджреНрдпрд╛рдк рдЪрд╛рд▓реВ рдирд╛рд╣реА рдЖрдгрд┐ Java рдереНрд░реЗрдб рд╢реЗрдбреНрдпреВрд▓рд░рд▓рд╛ рдЕрджреНрдпрд╛рдк рдпрд╛рдмрджреНрджрд▓ рдХрд╛рд╣реАрд╣реА рдорд╛рд╣рд┐рддреА рдирд╛рд╣реА. рдереНрд░реЗрдб рд╢реЗрдбреНрдпреБрд▓рд░рд▓рд╛ рдереНрд░реЗрдбрдмрджреНрджрд▓ рдЬрд╛рдгреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА thread.start()рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдордЧ рдереНрд░реЗрдб RUNNABLE рд╕реНрдерд┐рддреАрдд рдмрджрд▓реЗрд▓. рдЗрдВрдЯрд░рдиреЗрдЯрдордзреНрдпреЗ "рд░рди рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп" рдЖрдгрд┐ "рд░рдирд┐рдВрдЧ" рд╕реНрдерд┐рддреАрдВрдордзреНрдпреЗ рдлрд░рдХ рдХрд░рдгрд╛рд░реЗ рдмрд░реЗрдЪ рдЪреБрдХреАрдЪреЗ рдЖрдХреГрддреНрдпрд╛ рдЖрд╣реЗрдд. рдкрдг рд╣реА рдПрдХ рдЪреВрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг рдЬрд╛рд╡рд╛ "рд░реЗрдбреА рдЯреВ рд╡рд░реНрдХ" (рдзрд╛рд╡рдгреНрдпрд╛рдпреЛрдЧреНрдп) рдЖрдгрд┐ "рдХрд╛рд░реНрдпрд░рдд" (рдзрд╛рд╡рдгреЗ) рдпрд╛рдд рдлрд░рдХ рдХрд░рдд рдирд╛рд╣реА. рдЬреЗрд╡реНрд╣рд╛ рдереНрд░реЗрдб рдЬрд┐рд╡рдВрдд рдЕрд╕рддреЛ рдкрд░рдВрддреБ рд╕рдХреНрд░рд┐рдп рдирд╕рддреЛ (рдЪрд╛рд▓рдгреНрдпрд╛рдпреЛрдЧреНрдп рдирд╕рддреЛ), рддреЛ рджреЛрдирдкреИрдХреА рдПрдХрд╛ рд╕реНрдерд┐рддреАрдд рдЕрд╕рддреЛ:
  • рдЕрд╡рд░реЛрдзрд┐рдд тАФ рдЧрдВрднреАрд░ рд╡рд┐рднрд╛рдЧрд╛рдд рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдд рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗ рдмреНрд▓реЙрдХ synchronized.
  • рдкреНрд░рддреАрдХреНрд╖рд╛ - рдХрд╛рд╣реА рдЕрдЯ рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреБрд╕рд░реНрдпрд╛ рдзрд╛рдЧреНрдпрд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЖрд╣реЗ.
рдЬрд░ рдЕрдЯ рд╕рдорд╛рдзрд╛рдиреА рдЕрд╕реЗрд▓, рддрд░ рдереНрд░реЗрдб рд╢реЗрдбреНрдпреВрд▓рд░ рдереНрд░реЗрдб рд╕реБрд░реВ рдХрд░рддреЛ. рдЬрд░ рдереНрд░реЗрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реЗрд│реЗрдкрд░реНрдпрдВрдд рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЕрд╕реЗрд▓, рддрд░ рддреНрдпрд╛рдЪреА рд╕реНрдерд┐рддреА TIMED_WAITING рдЖрд╣реЗ. рдЬрд░ рдереНрд░реЗрдб рдпрд╛рдкреБрдвреЗ рдЪрд╛рд▓реВ рдирд╕реЗрд▓ (рддреЛ рдкреВрд░реНрдг рдЭрд╛рд▓рд╛ рдЕрд╕реЗрд▓ рдХрд┐рдВрд╡рд╛ рдЕрдкрд╡рд╛рдж рдЯрд╛рдХрд▓рд╛ рдЧреЗрд▓рд╛ рдЕрд╕реЗрд▓), рддрд░ рддреЛ рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдЖрд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рддреАрдд рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЛ. рдереНрд░реЗрдбрдЪреА рд╕реНрдерд┐рддреА рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, getState()рдкрджреНрдзрдд рд╡рд╛рдкрд░рд╛. рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рдПрдХ isAlive()рдкрджреНрдзрдд рджреЗрдЦреАрд▓ рдЕрд╕рддреЗ, рдЬреА рдереНрд░реЗрдб рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рди рдЖрд▓реНрдпрд╛рд╕ рдЦрд░реА рдкрд░рдд рдпреЗрддреЗ.

рд▓реЙрдХ рд╕рдкреЛрд░реНрдЯ рдЖрдгрд┐ рдереНрд░реЗрдб рдкрд╛рд░реНрдХрд┐рдВрдЧ

Java 1.6 рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд╕, рд▓реЙрдХрд╕рдкреЛрд░реНрдЯ рдирд╛рд╡рд╛рдЪреА рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдпрдВрддреНрд░рдгрд╛ рджрд┐рд╕рд▓реА. рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - резреирд╣рд╛ рд╡рд░реНрдЧ рд╡рд╛рдкрд░рдгрд╛рд▒реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдбрд╢реА "рдкрд░рдорд┐рдЯ" рдЬреЛрдбрддреЛ. park()рдкрд░рдорд┐рдЯ рдЙрдкрд▓рдмреНрдз рдЕрд╕рд▓реНрдпрд╛рд╕, рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдкрд░рдорд┐рдЯ рд╡рд╛рдкрд░реВрди, рдкрджреНрдзрддреАрд╡рд░ рдХреЙрд▓ рд▓рдЧреЗрдЪ рдпреЗрддреЛ. рдЕрдиреНрдпрдерд╛, рддреЗ рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рддреЗ. unparkрдЕрджреНрдпрд╛рдк рдЙрдкрд▓рдмреНрдз рдирд╕рд▓реНрдпрд╛рд╕, рдкрджреНрдзрдд рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рдиреЗ рдкрд░рдорд┐рдЯ рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ. рдлрдХреНрдд 1 рдкрд░рдорд┐рдЯ рдЖрд╣реЗ. рдЬрд╛рд╡рд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг LockSupportрд╡рд░реНрдЧрд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ Semaphore. рдЪрд▓рд╛ рдПрдХ рд╕рд╛рдзреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ:
import java.util.concurrent.Semaphore;
public class HelloWorldApp{

    public static void main(String[] args) {
        Semaphore semaphore = new Semaphore(0);
        try {
            semaphore.acquire();
        } catch (InterruptedException e) {
            // Request the permit and wait until we get it
            e.printStackTrace();
        }
        System.out.println("Hello, World!");
    }
}
рд╣рд╛ рдХреЛрдб рдиреЗрд╣рдореА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрд▓, рдХрд╛рд░рдг рдЖрддрд╛ рд╕реЗрдордлреЛрд░рдХрдбреЗ 0 рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ рдЖрд╣реЗрдд. рдЖрдгрд┐ acquire()рдХреЛрдбрдордзреНрдпреЗ рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рд╡рд░ (рдореНрд╣рдгрдЬреЗ рдкрд░рдорд┐рдЯрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рд╛), рдереНрд░реЗрдб рдкрд░рдорд┐рдЯ рдорд┐рд│реЗрдкрд░реНрдпрдВрдд рдерд╛рдВрдмрддреЛ. рдЖрдореНрд╣реА рд╡рд╛рдЯ рдкрд╛рд╣рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рд╣рд╛рддрд╛рд│рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ InterruptedException. рд╡рд┐рд╢реЗрд╖ рдореНрд╣рдгрдЬреЗ, рд╕реЗрдорд╛рдлреЛрд░рд▓рд╛ рд╕реНрд╡рддрдВрддреНрд░ рдереНрд░реЗрдб рд╕реНрдЯреЗрдЯ рдорд┐рд│рддреЗ. рдЖрдкрдг JVisualVM рдордзреНрдпреЗ рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рджрд┐рд╕реЗрд▓ рдХреА рд░рд╛рдЬреНрдп "рдкреНрд░рддреАрдХреНрд╖рд╛" рдирд╛рд╣реА рддрд░ "рдкрд╛рд░реНрдХ" рдЖрд╣реЗ. рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ.  рднрд╛рдЧ II тАФ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди - резрейрдЖрдгрдЦреА рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ:
public static void main(String[] args) throws InterruptedException {
        Runnable task = () -> {
            // Park the current thread
            System.err.println("Will be Parked");
            LockSupport.park();
            // As soon as we are unparked, we will start to act
            System.err.println("Unparked");
        };
        Thread th = new Thread(task);
        th.start();
        Thread.currentThread().sleep(2000);
        System.err.println("Thread state: " + th.getState());

        LockSupport.unpark(th);
        Thread.currentThread().sleep(2000);
}
рдереНрд░реЗрдбрдЪреА рд╕реНрдерд┐рддреА рдкреНрд░рддреАрдХреНрд╖рд╛рд░рдд рдЕрд╕реЗрд▓, рдкрд░рдВрддреБ JVisualVM waitрдХреАрд╡рд░реНрдб synchronizedрдЖрдгрд┐ parkрдХреНрд▓рд╛рд╕рдордзреНрдпреЗ рдлрд░рдХ рдХрд░рддреЗ LockSupport. рд╣реЗ LockSupportрдЗрддрдХреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдХрд╛ рдЖрд╣реЗ? рдЖрдореНрд╣реА рдкреБрдиреНрд╣рд╛ Java рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдХрдбреЗ рд╡рд│рддреЛ рдЖрдгрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдереНрд░реЗрдб рд╕реНрдерд┐рддреА рдкрд╛рд╣рддреЛ. рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛, рддреНрдпрд╛рдд рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪреЗ рдлрдХреНрдд рддреАрди рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд. рддреНрдпрд╛рдкреИрдХреА рджреЛрди рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд wait()рдЖрдгрд┐ join(). рдЖрдгрд┐ рддрд┐рд╕рд░рд╛ рдЖрд╣реЗ LockSupport. рдЬрд╛рд╡рд╛ рдордзреНрдпреЗ, рд▓реЙрдХ LockSupporрдЯреА рд╡рд░ рджреЗрдЦреАрд▓ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд рдЖрдгрд┐ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕рд╛рдзрдиреЗ рджреЗрдК рд╢рдХрддрд╛рдд. рдЪрд▓рд╛ рдПрдХ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкрд╣рд╛ ReentrantLock:
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class HelloWorld{

    public static void main(String []args) throws InterruptedException {
        Lock lock = new ReentrantLock();
        Runnable task = () -> {
            lock.lock();
            System.out.println("Thread");
            lock.unlock();
        };
        lock.lock();

        Thread th = new Thread(task);
        th.start();
        System.out.println("main");
        Thread.currentThread().sleep(2000);
        lock.unlock();
    }
}
рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдкреНрд░рдорд╛рдгреЗрдЪ рдпреЗрдереЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЖрд╣реЗ. рдСрдмреНрдЬреЗрдХреНрдЯ lockрдХреЛрдгреАрддрд░реА рд╕рд╛рдорд╛рдпрд┐рдХ рд╕рдВрд╕рд╛рдзрди рд╕реЛрдбрдгреНрдпрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ. mainрдЖрдореНрд╣реА JVisualVM рдордзреНрдпреЗ рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕реЗрд▓ рдХреА рдЬреЛрдкрд░реНрдпрдВрдд рдереНрд░реЗрдб рд▓реЙрдХ рд╕реЛрдбрдд рдирд╛рд╣реА рддреЛрдкрд░реНрдпрдВрдд рдирд╡реАрди рдереНрд░реЗрдб рдкрд╛рд░реНрдХ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ . рддреБрдореНрд╣реА рдпреЗрдереЗ рд▓реЙрдХреНрд╕рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рд╡рд╛рдЪреВ рд╢рдХрддрд╛: Java 8 StampedLocks vs. ReadWriteLocks рдЖрдгрд┐ Synchronized and Lock API Java рдордзреНрдпреЗ. рд▓реЙрдХ рдХрд╕реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗ рдЬрд╛рддрд╛рдд рд╣реЗ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдпрд╛ рд▓реЗрдЦрд╛рддреАрд▓ Phaser рдмрджреНрджрд▓ рд╡рд╛рдЪрдгреЗ рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ: Java Phaser рдЪреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ . рдЖрдгрд┐ рд╡рд┐рд╡рд┐рдз рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдпрдЭрд░реНрд╕рдмрджреНрджрд▓ рдмреЛрд▓рддрд╛рдирд╛, рддреБрдореНрд╣реА Java Synchronizers рд╡рд░реАрд▓ DZone рд▓реЗрдЦ рд╡рд╛рдЪрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ.

рдирд┐рд╖реНрдХрд░реНрд╖

рдпрд╛ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрдирд╛рдд, рдЖрдореНрд╣реА рдЬрд╛рд╡рд╛рдордзреНрдпреЗ рдереНрд░реЗрдбреНрд╕ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪреЗ рдореБрдЦреНрдп рдорд╛рд░реНрдЧ рддрдкрд╛рд╕рд▓реЗ. рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп: рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ. рднрд╛рдЧ I тАФ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреЗ рдзрд╛рдЧреЗ рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рдХреНрд▓рд╛рд╕. рднрд╛рдЧ рддрд┐рд╕рд░рд╛ тАФ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рдЪрд╛рдВрдЧрд▓реЗ рдПрдХрддреНрд░: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ. рднрд╛рдЧ IV тАФ рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп, рднрд╡рд┐рд╖реНрдп рдЖрдгрд┐ рдорд┐рддреНрд░ рдПрдХрддреНрд░ рдЪрд╛рдВрдЧрд▓реЗ: Java рдЖрдгрд┐ рдереНрд░реЗрдб рд╡рд░реНрдЧ. рднрд╛рдЧ V тАФ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯрд░, рдереНрд░реЗрдбрдкреВрд▓, рдлреЛрд░реНрдХ/рдЬреЙрдИрди рдмреЗрдЯрд░ рдПрдХрддреНрд░: Java рдЖрдгрд┐ рдереНрд░реЗрдб рдХреНрд▓рд╛рд╕. рднрд╛рдЧ VI - рдЖрдЧ рджреВрд░!
рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд