JavaRush /Java Blog /Random-ID /Level 28. Jawaban pertanyaan wawancara pada topik level
zor07
Level 31
Санкт-Петербург

Level 28. Jawaban pertanyaan wawancara pada topik level

Dipublikasikan di grup Random-ID
Halo semua! Saya memutuskan untuk melanjutkan studi saya di Javarash, meskipun saya sudah mendapatkan pekerjaan di Java. Level 28. Jawaban pertanyaan wawancara tentang topik level - 1Saya menulis blog ini untuk diri saya sendiri, dengan sangat malas, dan bisa dikatakan, di bawah tekanan. Saya akan sangat senang jika ada yang menganggapnya berguna, tetapi Anda sebaiknya tidak menggunakannya sebagai sumber utama untuk menemukan jawaban atas pertanyaan level.

1. Apa prioritas threadnya?

Setiap thread dalam sistem memiliki prioritasnya masing-masing. Prioritas adalah sejumlah angka dalam objek thread dari 1 hingga 10, dengan nilai yang lebih tinggi menunjukkan prioritas yang lebih tinggi. Sistem mengeksekusi thread dengan prioritas lebih tinggi terlebih dahulu, dan thread dengan prioritas lebih rendah menerima waktu CPU hanya ketika thread dengan hak istimewa lebih menganggur. Anda dapat bekerja dengan prioritas thread menggunakan dua fungsi:
void setPriority(int priority) //устанавливает приоритет потока.
Nilai prioritas yang mungkin adalah MIN_PRIORITY, NORM_PRIORITY dan MAX_PRIORITY.
int getPriority() // получает приоритет потока.
Sumber Jika prioritas tidak ditentukan, maka thread menerima prioritas 5 - sedang. Prioritas thread tidak terlalu mempengaruhi pengoperasiannya, namun lebih bersifat penasehat. Jika ada beberapa thread tidur yang perlu dimulai, maka mesin Java akan memulai thread dengan prioritas lebih tinggi terlebih dahulu. Mesin Java mengelola thread sesuai keinginannya. Thread dengan prioritas rendah tidak akan menganggur. Mereka hanya akan menerima waktu lebih sedikit dibandingkan yang lain, namun tetap akan dieksekusi. Dalam kebanyakan kasus, thread selalu berjalan pada prioritas yang sama. Mencoba memberi satu thread lebih banyak waktu daripada yang lain sering kali menunjukkan kesalahan arsitektur dalam program.

2. Apakah mungkin untuk menghentikan sebuah thread dengan mengurangi prioritasnya menjadi 0?

TIDAK. Akan dilemparIllegalArgumentException

3. Mengapa kelas ThreadGroup diperlukan?

Untuk mencegah thread apa pun menghentikan dan mengganggu semua thread dalam satu baris, konsep “kelompok thread” diperkenalkan. Sebuah thread hanya dapat mempengaruhi thread lain yang terdapat dalam grup yang sama dengannya. ThreadGroupadalah kelas yang mengelola grup thread. Pendekatan ini memungkinkan Anda melindungi thread dari perubahan yang tidak diinginkan. Terkadang Anda harus menjalankan kode yang tidak dapat Anda percayai 100%. Oleh karena itu, akan lebih mudah untuk menempatkan semua utasnya dalam kelompok terpisah dan mencegahnya mengganggu pekerjaan kelompok utas utama. Dengan kata lain, untuk mengelola kelompok thread

4. Kelompok thread manakah yang termasuk dalam thread utama?

main

5. Apa yang dimaksud dengan pola ThreadPool

Secara umum, pola ThreadPooladalah sekelompok benang yang menyelesaikan kelompok masalah. Tugas disusun dalam antrian. Setelah thread selesai mengerjakan suatu tugas, thread tersebut meminta tugas berikutnya dari antrean hingga semua tugas dalam antrean telah selesai. Setelah ini, thread dapat dihentikan atau dialihkan ke mode tidur hingga tugas baru muncul di antrean.

6. Mengapa kita memerlukan kelas ThreadPoolExecutor?

Untuk menyelesaikan sejumlah besar masalah kecil dengan sekelompok utas. Menggunakan kelas menghindari penggunaan sumber daya mesin yang boros. Karena membuat thread sendiri untuk setiap tugas sangat tidak rasional. Mesin Java mengalokasikan cukup banyak sumber daya untuk setiap thread. Dengan kata lain, membuat dan menghancurkan thread yang sudah habis dapat membuang lebih banyak sumber daya dan waktu dibandingkan tugas itu sendiri. Pengembang Java telah menemukan solusi elegan untuk masalah ini - ThreadPoolExecutor. Ini adalah kelas yang memiliki dua hal di dalamnya:
  • Antrean tugas di mana Anda dapat menambahkan tugas yang muncul di program.
  • Kumpulan utas (kelompok utas) – yang melakukan tugas-tugas ini.
Dalam hal ini, utas tidak dihancurkan setelah menyelesaikan tugas, tetapi tertidur. Untuk mulai menyelesaikan tugas baru segera setelah tugas itu muncul.

7. Berapa banyak cara membuat thread yang anda ketahui? (Utas, Dapat Dijalankan, Dapat Dipanggil )

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. Kelas Masa Depan digunakan untuk apa?

Objek ini dapat digunakan untuk mengetahui apakah suatu tugas telah selesai, dan juga untuk mendapatkan hasil pelaksanaannya. boolean cancel(boolean mayInterrupt); // Останавливает задачу.
boolean isCancelled(); //returns true, если задача была остановлена.
boolean isDone(); //returns true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //returns результат вызова метода call or кидает исключение, если оно было.

9. Apa kelebihan Callable dibandingkan Runnable?

Dengan menggunakan Callablekita dapat mengetahui apakah tugas telah selesai, dan mengetahui hasilnya, jauh lebih mudah daripada menggunakanRunnable

10. Apakah mungkin untuk membatalkan eksekusi suatu tugas jika kita menggunakan kelas Future?

Hal ini dimungkinkan jika tugas berada dalam antrian dan menunggu eksekusi, jika tidak, bukan fakta
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION