рдЬреЛрдХрд░ 2019 рдореЗрдВ рдУрдбрдиреЛрдХрд▓рд╛рд╕реНрдирд┐рдХрд┐рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ



28 рд╕реЗ 29 рдЕрдХреНрдЯреВрдмрд░ рддрдХ, рдЬреЛрдХрд░ 2019 рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЬрд╛рд╡рд╛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд░реВрд╕ рдХреА рд╡рд┐рд╢рд╛рд▓рддрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдФрд░ рд╕рдмрд╕реЗ рдХрдЯреНрдЯрд░ рд╕рдореНрдореЗрд▓рдиред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд╛рддрд╡реАрдВ рдмрд╛рд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рддреЛрдбрд╝ рджрд┐рдпрд╛, рдЗрд╕ рдмрд╛рд░ рдЗрд╕ рдЖрдпреЛрдЬрди рдиреЗ 2000 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред

рд╕рд╣рдкрд╛рдард┐рдпреЛрдВ рдиреЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЬреЛрдХрд░ рдореЗрдВ рд╣рд┐рд╕реНрд╕рд╛ рд▓рд┐рдпрд╛ред рдЗрд╕ рд╡рд░реНрд╖, рд╣рдорд╛рд░реЗ рдмреВрде рдкрд░, рдХреЛрдИ рднреА рдкреНрд░рдореБрдЦ OK.RU рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз "рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ" рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдореНрдореЗрд▓рди рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд╕рд╣реА рдЬрд╡рд╛рдм рджрд┐рдП рдФрд░ рдкреБрд░рд╕реНрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдПред

рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдордиреЗ рдЬреЛ рдХрд╛рдо рд╕реМрдВрдкреЗ, рдЙрдирдореЗрдВ рд╕реЗ резрежрежреж рдкрд░реНрдЪреЗ рдореЗрдВ рд╕реЗ резрежреж рд╕реЗ рдХрдо рд╡рд╛рдкрд╕ рдХрд┐рдП рдЧрдПред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдерд╛, рдЬрд┐рд╕рдиреЗ рел рдореЗрдВ рд╕реЗ рек.рел рдЕрдВрдХ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдПред

рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреА рддрд╛рдХрдд рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХреЗрдВред

1. рд╡реАрд░ рд╢рддреНрд░реБ


рдПрдХ рдЕрд▓реНрдкрдЬреНрдЮрд╛рдд рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред Group.of рдХрд╛ рдмреБрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП?

 enum Group { Few(1, 4), Several(5, 9), Pack(10, 19), Lots(20, 49), Swarm(50, Integer.MAX_VALUE); Group(int min, int max) { ... } public static Group of(int count) { for (Group group : Group.values()) { if (count >= group.min && count <= group.max) { return group; } } throw new IllegalArgumentException(); } } 

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

 private static final Group[] ALL_GROUPS = Group.values(); public static Group of(int count) { for (Group group : ALL_GROUPS) { .... } 


2. рд╕рдкрдиреЗ


рдЬрд╛рд╡рд╛ 13 рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдирд┐рдХреЛрд▓рд╛рдИ рдЕрднреА рднреА рдХреЗрд╡рд▓ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╕рдордЭрддреА рд╣реИред рдЙрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЕрдзрд┐рдХрддрдо рдФрд░ рдиреНрдпреВрдирддрдо рд╕реНрдЯреНрд░реАрдо рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред

 int getDiameter(Stream<Integer> stream) { int min = stream.min(Integer::compare).get(); int max = stream.max(Integer::compare).get(); return max - min; } 

рдирд┐рд░реНрдгрдп
рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдмрд╛рд░ рд╣реЛрддреА рд╣реИрдВ: рджреВрд╕рд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдСрдкрд░реЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, max ) рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛:

 java.lang.IllegalStateException: stream has already been operated upon or closed 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, min рдФрд░ max рд░рд┐рдЯрд░реНрди Optional , рдЬрд┐рд╕ рдкрд░ get() рдСрдкрд░реЗрд╢рди рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП NoSuchElementException рдлреЗрдВрдХ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдХреЙрд▓ get() рд╕реЗ рдкрд╣рд▓реЗ get() рдпрд╛ рдЕрдиреНрдп Optional рддрд░реАрдХреЛрдВ: orElse , orElseThrow , рдЗрддреНрдпрд╛рджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ get() рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИред

рдЕрдВрдд рдореЗрдВ, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рджреЛ int рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЕрдм int рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╕рд╛рд╡рдзрд╛рди рдбреЗрд╡рд▓рдкрд░ рд╕реЗ рдмрдЪ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рд╡рд╛рдкрд╕реА рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ long рдмрджрд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред

3. рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдлрд░


ByteBuffer рдЬрд╛рд╡рд╛ рддреБрд▓реНрдпрдХрд╛рд▓рди рдЖрджрд┐рдо put рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп ByteBuffer рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдзрд╛рдЧрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

 final ByteBuffer buf = ByteBuffer.allocate(SIZE); int get(int offset) { return buf.get(offset); } void put(int offset, int value) { buf.putInt(offset, value); } 

рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВ рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрдИ рдзрд╛рдЧреЗ рд╣реИрдВ, рдФрд░ рдкреБрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рд░рди рдорд┐рд▓рддреЗ рд╣реИрдВред

  • рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝
  • ReentrantLock
  • ReentrantReadWriteLock
  • StampedLock
  • рд╕рд┐рдХрдВрджрд░рд╛
  • рдЬрд╛рд╡рд╛ рдореЗрдВ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╣рдореЗрд╢рд╛ рдкрд░рдорд╛рдгреБ рд╣реЛрддрд╛ рд╣реИ

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

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

4. рдЙрдкрд╣рд╛рд░


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

 interface Present { long getId(); Date getCreated(); } void add(Present p) { // Implement me } 

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

 TreeSet<Present> tree = new TreeSet<>( Comparator.comparing(Present::getCreated) .thenComparing(Present::getId)); 

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

 void add(Present p) { if (tree.add(p) && tree.size() > N) { tree.pollFirst(); } } 


5. рдЖрдк рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ


рдЬреВрд▓рд┐рдпрд╛ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдВрдд рдХрд╛ рдХрднреА рдЗрдВрддрдЬрд╛рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░реЗрдЧреА?

 var executor = Executors.newFixedThreadPool(4); for (File f : File.listRoots()) { executor.submit(() -> f.delete()); } executor.awaitTermination(2, TimeUnit.HOURS); 

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

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


All Articles