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