Middle
როგორ მუშაობენ Executor-ები Java-ში?
sobes.tech AI
პასუხი AI-სგან
Executor — ეს არის ინტერფეისი Java-ში, რომელიც განსაზღვრავს კონტრაქტს დავალებების შესრულებისთვის თრედების პულში. ნაცვლად იმისა, რომ თითოეულ დავალებაზე ცხადად შექმნათ თრედი, თქვენ გადასცემთ დავალებებს შემსრულებლებს, რომლებიც მართავენ თრედების შექმნას, გამოყენებას და განადგურებას.
ძირითადი უპირატესობები:
- თრედების მართვა: უზრუნველყოფს ერთიანი გზას თრედების პულის მართვისთვის, თავიდან აცილებით თრედების ხელით შექმნას და სინქრონიზაციას.
- ეფექტურობა: მეორედ იყენებს არსებულ თრედებს, ამცირებს შექმნის და განადგურების ხარჯებს.
- მოწოდება: აუმჯობესებს პროგრამების შესრულებას და რეაგირების დროს, ასინქრონული დავალებების შესრულების მეშვეობით.
Executor აქვს ერთი მეთოდი:
// ასრულებს ამ ბრძანებას მომავალში.
void execute(Runnable command);
ხშირად გამოიყენება ქვესაწესები:
ExecutorService: ზრდისExecutor-ს და უზრუნველყოფს დამატებით მეთოდებს, რომლებიც მართავენ შემსრულებლის ციკლს და იღებენ შესრულების შედეგებს (მაგ.Future-ის მეშვეობით).ScheduledExecutorService: ზრდისExecutorService-ს და საშუალებას აძლევს დავალებების შესრულებას დაგვიანებით ან განრიგით.
კლასი Executors უზრუნველყოფს ფაბრიკატორ მეთოდებს სხვადასხვა ტიპის შემსრულებლების შესაქმნელად:
// ქმნის თრედების ფიქსირებულ რაოდენობის პულს.
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
// ქმნის პულს, რომელიც შეიძლება დინამიურად რეგულირდეს თრედების რაოდენობას.
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
// ქმნის პულს, რომელიც შეუძლია დავალებების შესრულება განრიგით.
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
მაგალითი გამოყენებისთვის:
// შემსრულებლის ობიექტი
ExecutorService executor = Executors.newFixedThreadPool(2);
// შესრულების დავალება
Runnable task = new Runnable() {
@Override
public void run() {
// დავალების კოდი
System.out.println("დავალება შესრულდება თრედში: " + Thread.currentThread().getName());
}
};
// დავალების გადაცემა შემსრულებელს
executor.execute(task);
// შემსრულებლის დახურვა (რესურსების გათავისუფლებისთვის აუცილებელია)
executor.shutdown();
execute()-ის გამოძახებისას, შემსრულებელი იღებს დავალებას (Runnable) და გადასცემს მას თავის პულში ერთ-ერთ თრედს შესრულებისთვის. დავალებების განაწილება და მათი სიცოცხლის ციკლი მართავს შემსრულებელი.