"рд╣реИрд▓реЛ, рдЕрдореАрдЧреЛ! рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдРрд▓реА рдиреЗ рдЖрдкрдХреЛ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдерд╛ рдЬреЛ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдХрдИ рдереНрд░реЗрдбреНрд╕ рдПрдХ рд╕рд╛рде рдПрдХ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рдБ?"

"рд╣рд╛рдБред"

"рдмрд╛рдд рдпрд╣ рд╣реИ, рдмрд╕ рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВ рд╣реИред рдПрдХ рдФрд░ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИред"

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

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдФрд░ рдореЗрдореЛрд░реА рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЕрдкрдиреЗ рдХреИрд╢ рдореЗрдВ рдХреЙрдкреА рдХрд░рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдЗрд╕ рддреЗрдЬ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рд╛рд░реЗ рдмрджрд▓рд╛рд╡ рдХрд░ рджреЗрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ ┬лрдзреАрдореА┬╗ рдореЗрдореЛрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдм рдХреЗ рджреМрд░рд╛рди, рдзреАрдореА рдореЗрдореЛрд░реА рдореЗрдВ рдкреБрд░рд╛рдиреЗ (рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд!) рдЪрд░ рд╣реЛрддреЗ рд╣реИрдВред

рдпрд╣реАрдВ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдПрдХ рдзрд╛рдЧрд╛ рдПрдХ рдЪрд░ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ , рдЬреИрд╕реЗ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ isCancel рдпрд╛ isInterrupted рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдзрд╛рдЧрд╛ ┬лрдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреЗрдЬ рдореЗрдореЛрд░реА рдореЗрдВ рд╣реБрдЖ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдХрд┐ рдереНрд░реЗрдбреНрд╕ рдХреА рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдХреИрд╢ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред (рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдЕрдХреНрд╕рд░ рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рдХреЛрд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдереНрд░реЗрдб рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдХреЛрд░ рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред)

рдЖрдЗрдП рдХрд▓ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╛рдж рдХрд░реЗрдВ:

рдХреЛрдб рд╡рд┐рд╡рд░рдг
class Clock implements Runnable
{
private boolean isCancel = false;

public void cancel()
{
this.isCancel = true;
}

public void run()
{
while (!this.isCancel)
{
Thread.sleep(1000);
System.out.println("Tick");
}
}
}
рдзрд╛рдЧрд╛ ┬лрдирд╣реАрдВ рдЬрд╛рдирддрд╛┬╗ рдХрд┐ рдЕрдиреНрдп рдзрд╛рдЧреЗ рдореМрдЬреВрдж рд╣реИрдВред

рд░рди рд╡рд┐рдзрд┐ рдореЗрдВ, рдкрд╣рд▓реА рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ isCancel рдЪрд░ рдХреЛ рдЪрд╛рдЗрд▓реНрдб рдереНрд░реЗрдб рдХреЗ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдСрдкрд░реЗрд╢рди рдирд┐рдореНрди рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

public void run()
{
boolean isCancelCached = this.isCancel;
while (!isCancelCached)
{
Thread.sleep(1000);
System.out.println("Tick");
}
}

рд░рджреНрдж рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдереНрд░реЗрдб рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ isCancel рдХрд╛ рдорд╛рди рд╕рд╛рдорд╛рдиреНрдп (рдзреАрдореА) рдореЗрдореЛрд░реА рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдереНрд░реЗрдбреНрд╕ рдХреЗ рдХреИрд╢ рдореЗрдВ рдирд╣реАрдВред

public static void main(String[] args)
{
Clock clock = new Clock();
Thread clockThread = new Thread(clock);
clockThread.start();

Thread.sleep(10000);
clock.cancel();
}

"рд╡рд╛рд╣! рдФрд░ рдХреНрдпрд╛ рд╡реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рд▓реЗрдХрд░ рдЖрдП, рдЬреИрд╕реЗ рдХрд┐  рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реНрдб ?"

"рдЖрдк рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ!"

рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдХреИрд╢реЗ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдИ рдЧреБрдирд╛ рдзреАрдореЗ рдЪрд▓рддреЗ рд╣реИрдВред рдлрд┐рд░ рдПрдХ рдЕрд▓рдЧ рдЙрдкрд╛рдп рдирд┐рдХрд▓рд╛ред

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

рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣реЗ:

рдХреЛрдб рд╡рд┐рд╡рд░рдг
class Clock implements Runnable
{
private volatile boolean isCancel = false;

public void cancel()
{
this.isCancel = true;
}

public void run()
{
while (!this.isCancel)
{
Thread.sleep(1000);
System.out.println("Tick");
}
}
}
рд╡рд╛рд╖реНрдкрд╢реАрд▓ рд╕рдВрд╢реЛрдзрдХ рдПрдХ рдЪрд░ рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рднреА рдереНрд░реЗрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдорд╛рдиреНрдп рдореЗрдореЛрд░реА рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
public static void main(String[] args)
{
Clock clock = new Clock();
Thread clockThread = new Thread(clock);
clockThread.start();

Thread.sleep(10000);
clock.cancel();
}

"рдЗрддрдирд╛ рд╣реА?"

"рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╕рд░рд▓ рдФрд░ рд╕реБрдВрджрд░ред"