рдЧрддрд┐рд░реЛрдз рдФрд░ рдЙрд╕рдХреЗ рдХрд╛рд░рдг - 1

"рд╣рд╛рдп, рдЕрдореАрдЧреЛ!"

"рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЧрддрд┐рд░реЛрдз рдХреНрдпрд╛ рд╣реИред"

"рдЕрд░реЗ, рдЖрдкрдиреЗ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕рд╛ рдХреБрдЫ рдмрддрд╛рдпрд╛ рд╣реИред"

"рд╣рд╛рдБ, рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдо рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред"

"рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдбрд▓реЙрдХ рдореЗрдВ рджреЛ рдзрд╛рдЧреЗ рдФрд░ рджреЛ рдореНрдпреВрдЯреЗрдХреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд▓реЙрдХ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм:"

рдП) рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЛ рджреЛрдиреЛрдВ рдореНрдпреВрдЯреЗрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдмреА)  рдкрд╣рд▓реЗ рдзрд╛рдЧреЗ рдиреЗ рдкрд╣рд▓реЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕реА)  рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдиреЗ рджреВрд╕рд░реЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

"рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг
public class Student
{
 private ArrayList friends = new ArrayList();

 public synchronized ArrayList getFriends()
 {
  synchronized(friends)
  {
   return new ArrayList(friends);
  }
 }

 public synchronized int getFriendsCount()
 {
  return friends.size();
 }

 public int addFriend(Student student)
 {
  synchronized(friends)
  {
   friends.add(student)
   return getFriendsCount ();
  }
 }
}

"рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдереНрд░реЗрдб GetFriends рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдлреНрд░реЗрдВрдбреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред"

"рдЗрд╕ рдмреАрдЪ, рдПрдХ рджреВрд╕рд░рд╛ рдереНрд░реЗрдб рдРрдбрдлреНрд░реЗрдВрдб рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдлреНрд░реЗрдВрдбреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди getFriendsCount )ред"

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

"рдореИрдВрдиреЗ рдПрдХ рдХрд┐рддрд╛рдм рдореЗрдВ рдорд┐рд▓реЗ рдПрдХ рдФрд░ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ:"

рдЙрджрд╛рд╣рд░рдг
class KnightUtil
{
 public static void kill(Knight knight1, Knight knight2)
 {
  synchronized(knight1)
  {
   synchronized(knight2)
   {
    knight2.live = 0;
    knight1.experience += 100;
   }
  }
 }
}

"рдПрдХ рдЦреЗрд▓ рд╣реИ рдЬрд╣рд╛рдБ рджреЛ рд╢реВрд░рд╡реАрд░ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд▓рдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рд╢реВрд░рд╡реАрд░ рджреВрд╕рд░реЗ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рджреЛ рд╢реВрд░рд╡реАрд░ рд╡рд╕реНрддреБрдПрдБ рджреА рдЬрд╛рддреА рд╣реИрдВред

"рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рджреЛрдиреЛрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЛрдИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рди рд╕рдХреЗред"

"рджреВрд╕рд░рд╛ рдирд╛рдЗрдЯ рдорд░ рдЬрд╛рддрд╛ рд╣реИ (рдПрдЪрдкреА = 0)"

"рдкрд╣рд▓рд╛ рд╢реВрд░рд╡реАрд░ 100 XP рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред"

"рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрд╣рд╛рдБ рджреВрд╕рд░рд╛ рд╢реВрд░рд╡реАрд░ рдкрд╣рд▓реЗ рдкрд░ рдЙрд╕реА рд╕рдордп рд╣рдорд▓рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рджреВрд╕рд░реЗ рд╢реВрд░рд╡реАрд░ рдХреЗ рд▓рд┐рдП рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реВрд░рд╡реАрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред"

"рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбреЗрдбрд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрдИ рддрд░реАрдХреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?"

"рдареАрдХ рд╣реИред рдХрднреА-рдХрднреА рдереНрд░реЗрдбреНрд╕ рдФрд░ рдкреВрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╣реИрдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред"

"рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдШрдЯрдирд╛ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рдШрдЯрд┐рдд рд╣реЛрддреА рд╣реИред рдзрдиреНрдпрд╡рд╛рдж, рдРрд▓реАред"