Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

40 Pertanyaan &Jawaban Wawancara Multithreading Java Teratas – Edisi 2026

40 Pertanyaan &Jawaban Wawancara Multithreading Java Teratas – Edisi 2026

Mempersiapkan wawancara multithreading Java menuntut pemahaman mendalam tentang konsep konkurensi dan pengalaman praktis. Di bawah ini Anda akan menemukan 40 pertanyaan yang disusun dengan cermat dan jawaban pakar yang mencakup segala hal mulai dari definisi dasar hingga topik lanjutan seperti rangkaian virtual dan konkurensi terstruktur.

👉 Unduhan PDF Gratis:Pertanyaan &Jawaban Wawancara Multithreading Java

1) Apa itu Multithreading di Java dan mengapa digunakan?

Multithreading memungkinkan aplikasi Java mengeksekusi beberapa thread secara bersamaan, memaksimalkan penggunaan CPU dan meningkatkan daya tanggap. Hal ini sangat berharga untuk tugas-tugas yang terikat I/O, komputasi skala besar, dan pembaruan GUI di mana satu thread dapat diblokir sementara thread lainnya terus memproses.

Manfaat

Contoh :Server web dapat menangani lusinan permintaan klien secara bersamaan dengan menetapkan setiap permintaan ke thread terpisah, sehingga menghindari pemblokiran pada operasi I/O.

2) Jelaskan siklus hidup thread di Java.

Thread Java berkembang melalui status berikut:

Negara Bagian Deskripsi
Baru Thread telah dibuat tetapi belum dimulai.
Dapat dijalankan Thread siap dijalankan atau sedang berjalan.
Diblokir Thread menunggu kunci monitor.
Menunggu Thread menunggu sinyal thread lain tanpa batas waktu.
Waktunya Menunggu Thread menunggu selama durasi tertentu.
Dihentikan Thread telah selesai dieksekusi.

Ketika t.start() dipanggil, thread berpindah dari Baru menjadi Dapat dijalankan .

3) Apa perbedaan antara proses dan thread?

Kriteria Proses Utas
Memori Ruang alamat sendiri Berbagi memori proses
Komunikasi Membutuhkan IPC Berbagi memori secara langsung
Biaya Pembuatan Mahal Ringan
Dampak Kegagalan Terisolasi Dapat mempengaruhi saudara kandung

Misalnya, proses browser mungkin berisi beberapa thread untuk rendering, jaringan, dan interaksi pengguna.

4) Bagaimana cara kerja sinkronisasi di Java?

Sinkronisasi menjamin bahwa hanya satu thread yang mengakses sumber daya bersama pada satu waktu, mencegah kondisi balapan dan kerusakan data. synchronized kata kunci mengunci seluruh metode atau blok tertentu.

  1. Metode Tersinkronisasi – mengunci monitor metode.
  2. Blok Tersinkronisasi – mengunci objek yang dipilih.
synchronized void increment() {
    count++;
}

5) Apa saja cara membuat thread di Java?

  1. Memperluas Thread
    class MyThread extends Thread {
        public void run() { System.out.println("Thread running"); }
    }
    new MyThread().start();
  2. Menerapkan Runnable
    class MyRunnable implements Runnable {
        public void run() { System.out.println("Runnable running"); }
    }
    new Thread(new MyRunnable()).start();
  3. Dapat Dipanggil &Masa Depan (modern) – mengembalikan nilai dan dapat menampilkan pengecualian yang dicentang.
    Callable task = () -> 42;
    Future result = executor.submit(task);
    System.out.println(result.get());

6) Apa perbedaan antara start() dan run() ?

Aspek start() run()
Pembuatan Thread Membuat thread OS baru Dijalankan di thread saat ini
Doa Menjadwalkan thread di JVM Pemanggilan metode sederhana
Konkurensi Eksekusi asinkron Eksekusi berurutan

Memanggil t.start() meluncurkan utas baru; t.run() berperilaku seperti metode lainnya.

7) Jelaskan konsep keamanan benang dan cara mencapainya.

Keamanan thread memastikan bahwa akses bersamaan ke data bersama tidak merusak status. Hal ini dapat dicapai melalui:

AtomicInteger counter = new AtomicInteger();
counter.incrementAndGet();

8) Apa perbedaan antara wait() , sleep() , dan yield() ?

Metode Kelas Pelepasan Kunci Tujuan Durasi wait() Objek Ya Tunggu notifikasi Sampai diberitahu sleep() Utas Tidak Jeda eksekusi Waktu tetap yield() Utas Tidak Sarankan peralihan penjadwal Tidak dapat diprediksi

Gunakan wait() untuk komunikasi antar-utas; gunakan sleep() untuk menjeda thread.

9) Bagaimana Executor Framework meningkatkan pengelolaan thread?

Kerangka kerja ini memisahkan penyerahan tugas dari pembuatan thread, memungkinkan pengumpulan thread yang efisien dan penggunaan kembali sumber daya. Ini adalah bagian dari java.util.concurrent dan penawaran:

  • Penggunaan kembali thread untuk overhead yang lebih rendah
  • Jenis kumpulan fleksibel (Tetap, Cache, Tunggal, Terjadwal, Pencurian Pekerjaan)
  • Mekanisme penghentian yang baik
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> System.out.println("Task executed"));
executor.shutdown();

10) Apa saja jenis kumpulan thread yang tersedia di Java?

Jenis Kolam Metode Pabrik Deskripsi
FixedThreadPool BaruFixedThreadPool(n) Jumlah thread tetap
CachedThreadPool newCachedThreadPool() Membuat thread sesuai kebutuhan, menggunakan kembali thread yang menganggur
SingleThreadExecutor newSingleThreadExecutor() Thread pekerja tunggal untuk eksekusi berurutan
Pool Thread Terjadwal Kolam Utas Terjadwal baru(n) Mendukung tugas yang tertunda atau berkala
Kolam Pencurian Kerja Kolam Pencurian Kerja Baru() Memanfaatkan prosesor yang tersedia secara dinamis

11) Apa yang dimaksud dengan kebuntuan di Java dan bagaimana cara mencegahnya?

Kebuntuan terjadi ketika dua atau lebih thread menunggu tanpa batas waktu hingga satu sama lain melepaskan kunci. Biasanya masalah ini timbul karena urutan kunci yang tidak konsisten.

synchronized (A) {
    synchronized (B) { /*...*/ }
}
synchronized (B) {
    synchronized (A) { /*...*/ }
}

Strategi pencegahan:

  1. Dapatkan kunci dalam tatanan global yang konsisten.
  2. Gunakan tryLock() dengan batas waktu.
  3. Hindari kunci bertumpuk jika memungkinkan.
  4. Lebih memilih utilitas konkurensi tingkat tinggi dibandingkan kunci manual.

12) Perbedaan antara synchronized dan ReentrantLock .

Fitur synchronized Kunci Masuk Kembali
Akuisisi Tersirat Eksplisit melalui lock()
Membuka kunci Otomatis saat metode keluar Manual melalui unlock()
Coba/Waktu habis Tidak tersedia Mendukung tryLock() dan batas waktu
Keadilan Tidak dapat dikonfigurasi Mendukung pemesanan yang adil
Variabel Kondisi Tidak didukung Mendukung banyak Condition objek
ReentrantLock lock = new ReentrantLock();
if (lock.tryLock(1, TimeUnit.SECONDS)) {
    try { /* critical section */ } finally { lock.unlock(); }
}

13) Perbedaan antara volatile dan synchronized .

Aspek mudah berubah disinkronkan
Tujuan Visibilitas Keatomisasian + visibilitas
Atomisitas Tidak ada jaminan Dijamin
Mengunci Tidak Ya
Kasus Penggunaan Bendera sederhana Operasi gabungan
volatile boolean running = true;
synchronized void increment() { count++; }

14) Menjelaskan ThreadLocal di Java.

ThreadLocal menyediakan data khusus thread, menghilangkan kebutuhan akan status bersama yang bisa berubah. Setiap thread mengakses salinan terisolasinya sendiri.

ThreadLocal counter = ThreadLocal.withInitial(() -> 0);
counter.set(counter.get() + 1);
  • Mencegah kerusakan data
  • Berguna untuk konteks per-thread (misalnya, ID sesi)
  • Harus menelepon remove() di kumpulan thread untuk menghindari kebocoran memori

15) Apa yang dimaksud dengan kelas atom di Java dan mengapa digunakan?

Kelas atom (misalnya, AtomicInteger , AtomicBoolean , AtomicReference ) melakukan operasi thread-safe dan bebas kunci menggunakan CAS (Compare-And-Swap). Mereka menawarkan throughput yang lebih tinggi untuk pembaruan sederhana dibandingkan dengan blok yang disinkronkan.

AtomicInteger counter = new AtomicInteger();
counter.incrementAndGet();

16) Apa itu semaphore dan apa bedanya dengan gembok?

Aspek Semafor Kunci
Tujuan Batasi akses bersamaan Saling mengecualikan
Izin Beberapa Lajang
Memblokir Memperoleh izin Mengakuisisi kepemilikan
Kasus Penggunaan Penggabungan koneksi Perlindungan bagian kritis
Semaphore sem = new Semaphore(3);
sem.acquire();
// use resource
sem.release();

17) Jelaskan Kerangka Fork/Join.

Diperkenalkan di Java 7, ini memungkinkan eksekusi paralel dari tugas-tugas yang dapat dipisahkan secara rekursif menggunakan algoritma pencurian pekerjaan. Thread yang menganggur mencuri pekerjaan dari thread yang sibuk, sehingga memaksimalkan pemanfaatan CPU.

class SumTask extends RecursiveTask {
    protected Integer compute() {
        if (end - start <= threshold) return computeDirectly();
        int mid = (start + end) / 2;
        SumTask left = new SumTask(start, mid);
        SumTask right = new SumTask(mid, end);
        left.fork();
        return right.compute() + left.join();
    }
}

18) Bagaimana CompletableFuture meningkatkan pemrograman asinkron?

CompletableFuture memungkinkan operasi asinkron yang non-pemblokiran dan dapat disusun, menghilangkan callback hell dan mendukung rangkaian, penanganan pengecualian, dan komposisi paralel.

CompletableFuture.supplyAsync(() -> "Hello")
    .thenApply(str -> str + " World")
    .thenAccept(System.out::println);

19) Apa itu thread daemon?

Thread daemon berjalan di latar belakang, menyediakan layanan seperti pengumpulan sampah atau tugas pengatur waktu. JVM menghentikan semua thread daemon secara otomatis ketika tidak ada lagi thread pengguna yang tersisa.

Thread daemon = new Thread(() -> System.out.println("Daemon running"));
daemon.setDaemon(true);
daemon.start();

20) Praktik terbaik untuk multithreading di Java.

  1. Lebih memilih utilitas konkurensi tingkat tinggi (ExecutorService, BlockingQueue).
  2. Hindari keadaan bersama yang bisa berubah; mendukung kekekalan.
  3. Gunakan koleksi bersamaan melalui wrapper yang disinkronkan.
  4. Tangani interupsi dengan benar dan pulihkan tanda interupsi.
  5. Mematikan eksekutor dengan baik dengan shutdown() atau shutdownNow() .
  6. Minimalkan cakupan sinkronisasi untuk mengurangi perselisihan.
  7. Profil sebelum mengoptimalkan; alat seperti JFR dan async‑profiler membantu mengidentifikasi hotspot.

21) Apa itu Java Memory Model (JMM) dan mengapa itu penting?

JMM mendefinisikan bagaimana thread berinteraksi melalui memori, memastikan visibilitas, pengurutan, dan atomisitas. Ini menetapkan hubungan terjadi‑sebelum, yang sangat penting untuk penulisan kode bersamaan yang benar.

  • Visibilitas:Perubahan pada satu rangkaian pesan harus dapat dilihat oleh rangkaian pesan lainnya.
  • Pemesanan:Tindakan diperintahkan untuk menjaga konsistensi.
  • Keatomisan:Operasi tertentu tidak dapat dibagi.

22) Perbedaan antara ConcurrentHashMap dan tersinkronisasiMap.

Fitur HashMap Bersamaan Peta tersinkronisasi
Mengunci granularitas Tingkat segmen (sebagian) Seluruh peta
Kinerja di bawah persaingan Tinggi Rendah
Kunci/nilai nol Tidak diizinkan Diizinkan
Konsistensi iterator Konsisten lemah Gagal‑cepat
Pembacaan serentak Diizinkan Diblokir

23) Mendeteksi dan men-debug kebuntuan.

  1. Thread dump melalui jstack <pid> mengungkap kebuntuan.
  2. VisualVM atau JConsole menyediakan pemantauan thread secara real-time.
  3. Deteksi terprogram dengan ThreadMXBean.findDeadlockedThreads() .

24) Aliran paralel vs. aliran eksplisit.

Aliran paralel secara internal menggunakan kerangka kerja Fork/Join, yang menawarkan API tingkat tinggi untuk pemrosesan data. Thread eksplisit memerlukan pengelolaan manual tetapi memberikan kontrol yang sangat detail.

Aspek Aliran Paralel Utas
Abstraksi API tingkat tinggi Kontrol tingkat rendah
Manajemen Otomatis melalui ForkJoinPool Kumpulan thread manual
Penyetelan Menggunakan kumpulan umum Ukuran kolam khusus
Penanganan kesalahan Terbatas Kontrol penuh

25) CountDownLatch, CyclicBarrier, dan Phaser.

Fitur CountDownLatch CyclicBarrier Fase
Setel Ulang Tidak Ya Ya
Pesta Tetap Tetap Dinamis
Kasus penggunaan Tunggu hingga tugas selesai Rangkaian yang harus dipenuhi Koordinasi dinamis
CountDownLatch latch = new CountDownLatch(3);
for (...) new Thread(() -> { /* work */ latch.countDown(); }).start();
latch.await();

26) Perbedaan antara Callable dan Runnable.

Aspek Dapat dijalankan Dapat dihubungi
Nilai pengembalian Tidak Ya
Pengecualian yang diperiksa Tidak Ya
Paket java.lang java.util.bersamaan
Callable task = () -> 42;
Future result = executor.submit(task);
System.out.println(result.get());

27) BlockingQueue untuk produsen‑konsumen.

BlockingQueue menawarkan operasi pemblokiran thread-safe yang menyederhanakan pola produsen-konsumen.

BlockingQueue queue = new ArrayBlockingQueue<>(10);
new Thread(() -> queue.put(1)).start(); // Producer
new Thread(() -> System.out.println(queue.take())).start(); // Consumer
  • Menghilangkan wait() manual /notify() .
  • Mendukung implementasi terbatas dan tidak terbatas.

28) Kelaparan benang dan livelock.

Starvation terjadi ketika thread berprioritas rendah tidak pernah menerima waktu CPU. Livelock terjadi ketika thread terus-menerus mengubah status tetapi tidak membuat kemajuan. Mitigasinya mencakup penguncian yang adil, menghindari antrian yang sibuk, dan penjadwalan yang tepat.

29) Meningkatkan kinerja aplikasi multithread.

  1. Gunakan kumpulan thread.
  2. Mengurangi cakupan sinkronisasi.
  3. Memanfaatkan struktur data bersamaan.
  4. Lebih menyukai objek yang tidak dapat diubah.
  5. Hindari pembagian palsu.
  6. Menyesuaikan jumlah thread dengan inti CPU.
  7. Gunakan I/O asinkron untuk memblokir operasi.

30) Skenario multithreading dunia nyata.

Di gateway pembayaran, pemrosesan transaksi bersamaan dioptimalkan dengan:

  1. ExecutorService untuk thread pekerja.
  2. ConcurrentHashMap untuk status transaksi.
  3. ReentrantLock untuk penguncian tingkat akun.
  4. CountDownLatch untuk sinkronisasi batch.
  5. CompletableFuture untuk respons asinkron.

Hasilnya:peningkatan throughput sebesar 35% dan pengurangan latensi sebesar 40%.

31) Thread Virtual di Java.

Thread virtual, yang diperkenalkan di Java 21, adalah thread ringan yang dikelola oleh JVM, memungkinkan jutaan tugas bersamaan dengan overhead minimal.

Fitur Rangkaian Platform Utas Virtual
Dikelola oleh OS JVM
Biaya pembuatan Tinggi Sangat rendah
Tingkat konkurensi Ribuan Jutaan
Penjadwalan tingkat OS Koperasi JVM
Kasus penggunaan Tugas yang terikat CPU Tugas terikat I/O/konkurensi tinggi
Thread.startVirtualThread(() -> System.out.println("Virtual thread running"));

32) Konkurensi Terstruktur.

Dipratinjau di Java 21, konkurensi terstruktur memperlakukan beberapa tugas bersamaan sebagai satu unit, memastikan tugas-tugas tersebut dimulai, dikelola, dan diakhiri secara bersamaan. Ini menghilangkan thread yatim piatu dan menyederhanakan penyebaran kesalahan.

try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
    Future user = scope.fork(() -> findUser());
    Future order = scope.fork(() -> fetchOrderCount());
    scope.join();
    scope.throwIfFailed();
    System.out.println(user.resultNow() + " has " + order.resultNow() + " orders.");
}

33) Aliran Reaktif di Java.

Aliran Reaktif memberikan model yang tidak memblokir dan peka terhadap tekanan balik untuk menangani aliran data, sehingga menjadi landasan bagi kerangka kerja seperti Project Reactor, RxJava, dan Spring WebFlux.

  • Publisher – menghasilkan data.
  • Subscriber – menghabiskan data.
  • Subscription – mengontrol aliran.
  • Processor – penerbit dan pelanggan.
Flow.Publisher publisher = subscriber -> subscriber.onNext(42);

34) Penanganan gangguan thread yang tepat.

Selalu periksa Thread.interrupted() dalam loop, bersihkan sumber daya, dan pertahankan status interupsi setelah menangkap InterruptedException .

while (!Thread.currentThread().isInterrupted()) {
    try { Thread.sleep(1000); }
    catch (InterruptedException e) {
        Thread.currentThread().interrupt(); // restore flag
        break;
    }
}

35) Paralelisme vs. konkurensi.

Konkurensi mengelola banyak tugas dengan menyisipkan eksekusi, sedangkan paralelisme menjalankan tugas secara bersamaan di beberapa inti CPU.

Konsep Definisi Contoh
Konkurensi Tugas menyisipkan Menangani 1000 permintaan klien secara bersamaan
Paralelisme Eksekusi simultan Menjalankan komputasi di seluruh inti CPU

36) Alat dan teknik pembuatan profil thread.

Alat Tujuan
jstack Pengambilan thread dump
jconsole / VisualVM Pemantauan waktu nyata
Perekam Penerbangan Java (JFR) Pembuatan profil overhead rendah
Kontrol Misi (JMC) Memvisualisasikan rekaman JFR
profiler asinkron Pembuatan profil CPU &alokasi
ThreadMXBean Inspeksi terprogram
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
System.out.println(bean.getThreadCount());

37) Hambatan performa yang umum.

  1. Pertentangan kunci yang berlebihan.
  2. Pembagian variabel yang salah.
  3. Overhead peralihan konteks.
  4. Sinkronisasi yang tidak tepat.
  5. Penggunaan variabel volatil secara berlebihan.

Pengoptimalan mencakup penguncian menyeluruh, struktur bebas kunci, meminimalkan pembuatan thread, dan penggunaan penyimpanan lokal thread.

38) Algoritme bebas kunci, bebas tunggu, dan bebas hambatan.

Jenis Definisi Jaminan
Bebas kunci Setidaknya satu thread mengalami kemajuan. Kemajuan seluruh sistem.
Tidak perlu menunggu Setiap thread membuat kemajuan dalam langkah-langkah yang dibatasi. Jaminan terkuat.
Bebas hambatan Kemajuan tanpa adanya perselisihan. Jaminan terlemah.

Operasi AtomicInteger bebas kunci; memblokir antrian menggunakan kunci.

39) Internal ForkJoinPool.

Setiap pekerja mempunyai dequenya masing-masing; pekerja yang menganggur mencuri tugas dari orang lain, mengurangi perselisihan dan meningkatkan hasil.

ForkJoinPool pool = new ForkJoinPool();
pool.submit(() -> IntStream.range(0, 100).parallel().forEach(System.out::println));

40) Merancang sistem yang sangat bersamaan untuk jutaan permintaan.

  1. Thread Virtual untuk penanganan permintaan yang ringan.
  2. Streaming Reaktif untuk I/O asinkron.
  3. Konkurensi Terstruktur untuk siklus hidup tugas yang dapat diprediksi.
  4. Cache berkinerja tinggi (ConcurrentHashMap, Caffeine).
  5. Antrean aman-thread (Disruptor, BlockingQueue).
  6. Pemantauan dengan JFR &JMC.
  7. CompletableFuture untuk alur kerja asinkron.

Hasilnya:Mencapai jutaan koneksi bersamaan dengan pemblokiran minimal dan penggunaan sumber daya optimal.

🔍 Pertanyaan Wawancara Multithreading Java Teratas dengan Skenario Dunia Nyata dan Respons Strategis

Di bawah ini sepuluh pertanyaan realistis, apa yang diharapkan pewawancara, dan contoh jawaban yang bagus.

1) Perbedaan antara proses dan thread di Java?

Kandidat harus menjelaskan dasar-dasar OS dan JVM, penggunaan memori, dan alur eksekusi. Misalnya, proses browser berisi beberapa thread untuk rendering, jaringan, dan input pengguna.

2) Tujuan dari synchronized kata kunci?

Menjelaskan kontrol konkurensi, kunci intrinsik, dan keamanan thread. Hal ini memastikan bahwa hanya satu thread yang mengakses bagian penting pada satu waktu.

3) Masalah multithreading yang menantang dihadapi dan diselesaikan?

Jelaskan skenario kebuntuan, bagaimana Anda mengidentifikasinya melalui dump thread, dan menyelesaikannya dengan menerapkan perintah kunci yang konsisten.

4) Model Memori Java dan visibilitasnya?

Jelaskan yang terjadi‑sebelum hubungan, volatile , dan konstruksi sinkronisasi yang menjamin visibilitas dan keteraturan.

5) Perbedaan antara wait() , notify() , dan notifyAll() ?

Jelaskan komunikasi antar-thread dan pantau mekanismenya.

6) Mengoptimalkan aplikasi multithread?

Identifikasi pertikaian kunci, ganti synchronized dengan ConcurrentHashMap , dan menunjukkan perolehan throughput yang terukur.

7) Memperbarui struktur data bersama dengan aman?

Gunakan koleksi thread‑safe atau penguncian eksplisit dengan ReentrantLock untuk kontrol granular.

8) Peran ExecutorService ?

Mengelola kumpulan thread pekerja, mengurangi overhead, dan menyederhanakan manajemen siklus hidup.

9) Memecahkan masalah kondisi balapan?

Reproduksi saat dimuat, tingkatkan logging, dan perbaiki dengan menambahkan sinkronisasi yang tepat.

10) Merancang solusi multithreading dengan berbagai prioritas?

Gunakan antrian prioritas dengan ThreadPoolExecutor dan pembanding khusus untuk tugas dengan prioritas lebih tinggi.

java

  1. Penyempurnaan API CompletableFuture
  2. Kelas Penulis Java
  3. Tutorial Java Array:Deklarasi, Buat, Inisialisasi [Contoh]
  4. Metode Java String charAt() dengan Contoh
  5. Program untuk Mencetak Bilangan Prima Dari 1 hingga 100 di Java
  6. Jawa coba ... tangkap
  7. String Jawa
  8. Komentar Jawa
  9. Java - Serialisasi
  10. Tutorial Apache ANT:Apa itu Ant Build Tool? Contoh