JavaRush /Java Blog /Random-IT /Livello 28. Risposte alle domande dell'intervista sull'ar...
zor07
Livello 31
Санкт-Петербург

Livello 28. Risposte alle domande dell'intervista sull'argomento del livello

Pubblicato nel gruppo Random-IT
Ciao a tutti! Ho deciso di continuare i miei studi a Javarash, nonostante avessi già trovato lavoro a Java. Livello 28. Risposte alle domande dell'intervista sull'argomento del livello - 1Scrivo questo blog per me stesso, molto pigramente e, si potrebbe dire, sotto pressione. Sarò molto felice se qualcuno lo trovasse utile, ma non dovresti usarlo come fonte principale per trovare risposte a domande di livello.

1. Quali sono le priorità del thread?

Ogni thread nel sistema ha la propria priorità. La priorità è un numero nell'oggetto thread compreso tra 1 e 10, con un valore più alto che indica una priorità più alta. Il sistema esegue prima i thread con priorità più alta, mentre i thread con priorità più bassa ricevono tempo CPU solo quando le loro controparti con più privilegi sono inattive. Puoi lavorare con le priorità dei thread utilizzando due funzioni:
void setPriority(int priority) //устанавливает приоритет потока.
I possibili valori di priorità sono MIN_PRIORITY, NORM_PRIORITY e MAX_PRIORITY.
int getPriority() // получает приоритет потока.
Sorgente Se la priorità non è specificata, il thread riceve la priorità 5 - media. La priorità del thread non influisce molto sul suo funzionamento, ma è piuttosto di natura consultiva. Se sono presenti più thread dormienti che devono essere avviati, la macchina Java avvierà per primo il thread con la priorità più alta. La macchina Java gestisce i thread come meglio crede. I thread a bassa priorità non saranno inattivi. Riceveranno semplicemente meno tempo degli altri, ma verranno comunque giustiziati. Nella maggior parte dei casi, i thread vengono sempre eseguiti con la stessa priorità. Cercare di concedere a un thread più tempo rispetto ad altri spesso indica un errore di architettura nel programma.

2. È possibile interrompere un thread riducendo la sua priorità a 0?

NO. Verrà lanciatoIllegalArgumentException

3. Perché è necessaria la classe ThreadGroup?

Per evitare che qualsiasi thread si interrompa e interrompa tutti i thread di seguito, è stato introdotto il concetto di “gruppo di thread”. Un thread può influenzare solo altri thread contenuti nel suo stesso gruppo. ThreadGroupè una classe che gestisce gruppi di thread. Questo approccio consente di proteggere i thread da modifiche indesiderate. A volte devi eseguire codice di cui non puoi fidarti al 100%. Pertanto, è conveniente posizionare tutti i suoi thread in un gruppo separato e impedire loro di interferire con il lavoro del gruppo principale di thread. In altre parole, per gestire gruppi di thread

4. A quale gruppo di thread appartiene il thread principale?

main

5. Qual è il modello ThreadPool

In termini generali, un pattern ThreadPoolè un gruppo di thread che risolvono gruppi di problemi. Le attività sono organizzate in una coda. Una volta che un thread termina di lavorare su un'attività, richiede l'attività successiva dalla coda fino al completamento di tutte le attività nella coda. Successivamente, il thread può terminare o andare in modalità di sospensione finché non vengono visualizzate nuove attività in coda.

6. Perché abbiamo bisogno della classe ThreadPoolExecutor?

Per risolvere un gran numero di piccoli problemi con un gruppo di thread. L'uso di una classe evita uno spreco di risorse della macchina. Perché creare il proprio thread per ogni attività non è molto razionale. La macchina Java alloca molte risorse per ciascun thread. In altre parole, creare e distruggere un thread esaurito può far sprecare più risorse e tempo dell'attività stessa. Gli sviluppatori Java hanno trovato una soluzione elegante a questo problema: ThreadPoolExecutor. Questa è una classe che ha due cose al suo interno:
  • Una coda di attività alla quale è possibile aggiungere attività così come appaiono nel programma.
  • Pool di thread (gruppo di thread) – che eseguono queste attività.
In questo caso, i thread non vengono distrutti dopo aver completato l'attività, ma si addormentano. Per iniziare a completare una nuova attività non appena appare.

7. Quanti modi per creare un thread conosci? (Thread, eseguibile, richiamabile )

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. A cosa serve la classe Future?

Questo oggetto può essere utilizzato per scoprire se un'attività è già stata completata e anche per ottenere il risultato della sua esecuzione. boolean cancel(boolean mayInterrupt); // Останавливает задачу.
boolean isCancelled(); //returns true, если задача была остановлена.
boolean isDone(); //returns true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //returns результат вызова метода call or кидает исключение, если оно было.

9. Quali sono i vantaggi di Callable rispetto a Runnable?

Utilizzando Callablepossiamo scoprire se l'attività è stata completata e scoprirne il risultato, molto più semplice dell'utilizzoRunnable

10. È possibile annullare l'esecuzione di un'attività se utilizziamo la classe Future?

È possibile se l'attività è in coda e attende l'esecuzione, altrimenti non è un dato di fatto
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION