JavaRush /Java Blog /Random-TL /Level 28. Mga sagot sa mga tanong sa pakikipanayam sa ant...
zor07
Antas
Санкт-Петербург

Level 28. Mga sagot sa mga tanong sa pakikipanayam sa antas ng paksa

Nai-publish sa grupo
Kamusta kayong lahat! Nagpasya akong ipagpatuloy ang aking pag-aaral sa Javarash, sa kabila ng katotohanan na nakahanap na ako ng trabaho sa Java. Antas 28. Mga sagot sa mga tanong sa panayam sa paksa ng antas - 1Sinusulat ko ang blog na ito para sa aking sarili, napaka tamad, at, maaaring sabihin ng isa, sa ilalim ng presyon. Lubos akong magiging masaya kung may makakitang kapaki-pakinabang ito, ngunit hindi mo ito dapat gamitin bilang pangunahing mapagkukunan para sa paghahanap ng mga sagot sa mga tanong sa antas.

1. Ano ang mga priyoridad ng thread?

Ang bawat thread sa system ay may sariling priyoridad. Ang priyoridad ay ilang numero sa thread object mula 1 hanggang 10, na may mas mataas na value na nagsasaad ng mas mataas na priyoridad. Ang system ay nagpapatupad muna ng mas mataas na priyoridad na mga thread, at ang mga mas mababang priyoridad na thread ay tumatanggap lamang ng oras ng CPU kapag ang kanilang mas may pribilehiyong mga katapat ay idle. Maaari kang magtrabaho sa mga priyoridad ng thread gamit ang dalawang function:
void setPriority(int priority) //устанавливает приоритет потока.
Ang mga posibleng priyoridad na value ay MIN_PRIORITY, NORM_PRIORITY at MAX_PRIORITY.
int getPriority() // получает приоритет потока.
Pinagmulan Kung hindi tinukoy ang priyoridad, ang thread ay makakatanggap ng priyoridad 5 - medium. Ang priyoridad ng thread ay hindi lubos na nakakaapekto sa operasyon nito, ngunit sa halip ay nagpapayo sa kalikasan. Kung mayroong maraming sleeping thread na kailangang simulan, pagkatapos ay sisimulan ng Java machine ang thread na may mas mataas na priyoridad muna. Pinamamahalaan ng Java machine ang mga thread ayon sa nakikita nitong akma. Ang mga thread na mababa ang priyoridad ay hindi magiging idle. Makakatanggap lamang sila ng mas kaunting oras kaysa sa iba, ngunit isasagawa pa rin. Sa karamihan ng mga kaso, ang mga thread ay palaging tumatakbo sa parehong priyoridad. Ang pagsisikap na bigyan ang isang thread ng mas maraming oras kaysa sa iba ay madalas na nagpapahiwatig ng isang error sa arkitektura sa programa.

2. Posible bang ihinto ang isang thread sa pamamagitan ng pagbabawas ng priyoridad nito sa 0?

Hindi. ItataponIllegalArgumentException

3. Bakit kailangan ang klase ng ThreadGroup?

Upang maiwasan ang anumang thread na huminto at makagambala sa lahat ng mga thread sa isang hilera, ang konsepto ng isang "grupo ng mga thread" ay ipinakilala. Ang isang thread ay maaari lamang makaapekto sa iba pang mga thread na nakapaloob sa parehong pangkat tulad nito. ThreadGroupay isang klase na namamahala sa mga pangkat ng mga thread. Binibigyang-daan ka ng diskarteng ito na protektahan ang mga thread mula sa mga hindi gustong pagbabago. Minsan kailangan mong magpatakbo ng code na hindi mo mapagkakatiwalaan ng 100%. Samakatuwid, ito ay maginhawa upang ilagay ang lahat ng mga thread nito sa isang hiwalay na grupo at maiwasan ang mga ito na makagambala sa gawain ng pangunahing grupo ng mga thread. Sa madaling salita, upang pamahalaan ang mga pangkat ng mga thread

4. Aling pangkat ng mga thread kabilang ang main-thread?

main

5. Ano ang pattern ng ThreadPool

Sa pangkalahatan, ang pattern ThreadPoolay isang pangkat ng mga thread na lumulutas sa mga grupo ng mga problema. Ang mga gawain ay isinaayos sa isang pila. Kapag natapos na ang isang thread sa paggawa sa isang gawain, hinihiling nito ang susunod na gawain mula sa pila hanggang sa makumpleto ang lahat ng mga gawain sa pila. Pagkatapos nito, maaaring wakasan o matulog ang thread hanggang sa lumitaw ang mga bagong gawain sa pila.

6. Bakit kailangan natin ang klase ng ThreadPoolExecutor?

Upang malutas ang isang malaking bilang ng mga maliliit na problema sa isang pangkat ng mga thread. Ang paggamit ng klase ay umiiwas sa maaksayang paggamit ng mga mapagkukunan ng makina. Dahil ang paglikha ng iyong sariling thread para sa bawat gawain ay hindi masyadong makatwiran. Ang makina ng Java ay naglalaan ng maraming mapagkukunan para sa bawat thread. Sa madaling salita, ang paggawa at pagsira sa isang ginugol na thread ay maaaring mag-aksaya ng mas maraming mapagkukunan at oras kaysa sa gawain mismo. Ang mga developer ng Java ay nakabuo ng isang eleganteng solusyon sa problemang ito - ThreadPoolExecutor. Ito ay isang klase na mayroong dalawang bagay sa loob:
  • Isang pila ng gawain kung saan maaari kang magdagdag ng mga gawain habang lumilitaw ang mga ito sa programa.
  • Pool ng mga thread (pangkat ng mga thread) – na gumaganap ng mga gawaing ito.
Sa kasong ito, ang mga thread ay hindi nawasak pagkatapos makumpleto ang gawain, ngunit makatulog. Upang simulan ang pagkumpleto ng isang bagong gawain sa sandaling lumitaw ito.

7. Ilang paraan ng paggawa ng thread ang alam mo? (Thread, Runnable, Callable )

public class ThreadsTests {
    //Способ 1
    static class ThreadExampleRunnable implements Runnable{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    }

    //Способ 2
    static class ThreadExampleFromThread extends Thread {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    }

    //Способ 3
    static class ThreadExampleFromCallable implements Callable{
        @Override
        public String call() throws Exception {
            return Thread.currentThread().getName();
        }
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        new Thread(new ThreadExampleRunnable()).start(); //Способ 1
        new ThreadExampleFromThread().start(); //Способ 2

        //Способ 3
        ExecutorService service = Executors.newFixedThreadPool(5);
        Future task = service.submit(new ThreadExampleFromCallable());
        System.out.println(task.get());

    }
}

8. Para saan ginagamit ang klase ng Hinaharap?

Maaaring gamitin ang bagay na ito upang malaman kung nakumpleto na ang isang gawain, at upang makuha din ang resulta ng pagpapatupad nito. boolean cancel(boolean mayInterrupt); // Останавливает задачу.
boolean isCancelled(); //returns true, если задача была остановлена.
boolean isDone(); //returns true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //returns результат вызова метода call or кидает исключение, если оно было.

9. Ano ang mga pakinabang ng Callable kaysa sa Runnable?

Gamit ang Callablemaaari naming malaman kung ang gawain ay nakumpleto, at malaman ang resulta nito, mas madali kaysa sa paggamitRunnable

10. Posible bang kanselahin ang pagpapatupad ng isang gawain kung gagamitin natin ang klase ng Hinaharap?

Posible kung ang gawain ay nasa pila at naghihintay ng pagpapatupad, kung hindi man ay hindi isang katotohanan
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION