рдЬрд╛рд╡рд╛ 5 рдореЗрдВ, рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рдВрдЧрдарди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рдЬреЛрдбрд╝реА рдЧрдИрдВред рдЗрд╕ рдФрд░ рдмрд╛рдж рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдЬрд╛рдПрдВрдЧреЗред
ExecutorService
рдЬрд╛рд╡рд╛ 5 рд╕реЗ рдкрд╣рд▓реЗ, рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреВрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
ExecutorService
рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде
ExecutorService
рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ рд╣реИред
ExecutorService
рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ ExecutorService рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рдпрд╛ рддреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (
ScheduledThreadPoolExecutor
рдпрд╛
ThreadPoolExecutor
) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣
Executors
рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ 2 рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
ExecutorService service = Executors.newFixedThreadPool(2);
рдпрджрд┐ рдЖрдк рдереНрд░реЗрдбреНрд╕ рдХреЗ рдХреИрд╢рд┐рдВрдЧ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдереНрд░реЗрдб рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдХреНрд░рд┐рдп рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд┐рдП рдЧрдП рдереНрд░реЗрдбреНрд╕ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ), рддреЛ рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
ExecutorService service = Executors.newCachedThreadPool();
рдЕрдм рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдгред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЛ 10 рдмрд╛рд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдХреБрдЫ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
ExecutorService service = Executors.newCachedThreadPool();
for ( int i = 0; i < 10; i++) {
service.submit( new Runnable() {
public void run() {
// snip... piece of code
}
});
}
submit
рд╡рд┐рдзрд┐ рдПрдХ
Future
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рднреА рд▓реМрдЯрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд╛рд╕ рдХреА рдЧрдИ
Runnable
рдпрд╛
Callable
(рдЬреЛ рдорд╛рди рд▓реМрдЯрд╛ рд╕рдХрддреА рд╣реИ) рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдЗрд╕рд╕реЗ, рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЗрд╖рд┐рдд рдХреЛрдб рд╕рдлрд▓ рдерд╛, рдпрд╛ рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
Future
рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░
get
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ
get
рдПрдХ рд╡реИрд▓реНрдпреВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА рдЬреЛ рдХрд┐
Callable
(рдпрд╛
Runnable
рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рдкрд░
null
) рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреА рд╣реИред рд╡рд┐рдзрд┐ 2 рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реИ:
InterruptedException
, рдЬрд┐рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ
interrupt()
рд╡рд┐рдзрд┐, рдпрд╛
ExecutionException
рдорд╛рдзреНрдпрдо рд╕реЗ
interrupt()
рдпрджрд┐
Runnable
рдпрд╛
Callable
рдореЗрдВ рдХреЛрдб
RuntimeException
Callable
RuntimeException
, рдЬреЛ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдЕрдкрд╡рд╛рдж рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
ScheduledExecutorService
рдХрднреА-рдХрднреА рдХреЛрдб рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдлрд┐рд░
ScheduledExecutorService
рдПрдХреНрд╕рд┐рдХреНрдпреВрдЯрд░ рд╕реЗрд╡рд╛ рд╕реЗ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдХреЛрдб рдбрд╛рд▓рдиреЗ рдФрд░ рдЕрдВрддрд░рд╛рд▓ рдпрд╛ рд╕рдордп рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рд╣реЛрдЧреАред рдЕрдВрддрд░рд╛рд▓ рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рд░рди рдХреЗ рдЕрдВрдд рдФрд░ рджреВрд╕рд░реЗ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
ScheduledExecutorService
рд╡рд┐рдзрд┐рдпрд╛рдБ
ScheduledExecutorService
рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ
ScheduledFuture
рдлрд╝реЙрдЙрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд▓рдВрдм рдорд╛рди рднреА рд╣реЛрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк 5 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЪрд╛рд╣рд┐рдП:
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.schedule( new Runnable() { ... }, 5, TimeUnit.SECONDS);
рдпрджрд┐ рдЖрдк рд╣рд░ рд╕реЗрдХрдВрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate( new Runnable() { ... }, 0, 1, TimeUnit.SECONDS);
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЖрдк рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмреАрдЪ 1 рд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleWithFixedDelay( new Runnable() { ... }, 0, 1, TimeUnit.SECONDS);