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) և փոխանցում է այն իր պուլում գտնվող մեկ թելին՝ կատարման համար: Կառավարումը առաջադրանքների բաշխման և դրանց կյանքի ցիկլի՝ կատարողին է վերապահված։