Üst 40 Java Çoklu İşlemci Kullanımıyla İlgili Mülakat Soruları ve Cevapları (2026)

için hazırlanıyor Java Çoklu iş parçacığı (multithreading) mülakatı mı? Bundan sonra nelerle karşılaşabileceğinizi anlamak çok önemli. İkinci cümle şunları içermelidir: "Java Çoklu İşlem Görüşme SorularıBu durum, derinliği, yaklaşımı ve teknik düşünce yapısını ortaya koyuyor.
Çoklu iş parçacıklı geliştirme alanındaki fırsatlar, sistemler ölçeklendikçe genişlemeye devam ediyor ve güçlü teknik uzmanlık ile gerçek dünya teknik deneyimi gerektiriyor. Yeni mezunlar, orta düzey ve kıdemli profesyoneller için roller, analiz becerileri, alan uzmanlığı ve yaygın ve ileri düzey kavramları ele almak için sağlam bir beceri seti gerektiriyor. Bu soru ve cevaplar, adayların pratik zorlukların üstesinden gelmelerine ve alanda çalışma konusunda temel düzeyde deneyim sahibi olduklarını kanıtlamalarına yardımcı olur. Daha fazla oku…
👉 Ücretsiz PDF İndir: Java Çoklu İşlemle İlgili Mülakat Soruları ve Cevapları
Iyi Java Çoklu İşlemle İlgili Mülakat Soruları ve Cevapları
1) Çoklu iş parçacığı (Multithreading) nedir? Java ve neden kullanılır?
Çoklu iş parçacığı Java İki veya daha fazla iş parçacığının eş zamanlı olarak çalıştırılmasına olanak tanıyan ve CPU kullanımını en üst düzeye çıkaran bir programlama kavramıdır. Her iş parçacığı bağımsız olarak çalışır ancak bellek gibi aynı işlem kaynaklarını paylaşır. Bu, özellikle G/Ç işlemleri, hesaplama veya GUI yanıt verme hızı gibi paralelleştirilebilen görevlerde performansı artırır.
Avantajları şunlardır:
- Daha iyi CPU kullanımı
- Bağımsız görevler için daha hızlı yürütme
- Uygulama yanıt verme hızında iyileşme
Örnek: Bir web sunucusunda, birden fazla istek aynı anda işlenebilir ve böylece her kullanıcı isteği için engelleme yaşanmaz.
2) Bir iş parçacığının yaşam döngüsünü açıklayın. Java.
A Java İplik, ömrü boyunca birden fazla durumdan geçer. İş Parçacığı Yaşam Döngüsü aşağıdaki gibi özetlenebilir:
| Eyalet | Tanım |
|---|---|
| Yeni | Konu oluşturuldu ancak henüz başlatılmadı. |
| çalıştırılabilir | İşlem bloğu çalışmaya hazır veya çalışıyor. |
| tıkalı | Monitör kilidini bekleyen iş parçacığı. |
| Bekleyen | Bir iş parçacığı, başka bir iş parçacığının sinyalini süresiz olarak bekliyor. |
| Zamanlanmış Bekleme | Belirli bir süre bekleyen iş parçacığı. |
| sonlandırıldı | İşlem tamamlandı. |
Örnek: Ne zaman t.start() çağrılır, iş parçacığı geçiş yapar Yeni için çalıştırılabilir.
3) Bir işlem ile bir iş parçacığı arasındaki fark nedir?
İkisi de yürütme birimlerini temsil eder, ancak davranışları ve bellek yönetimleri farklıdır.
| Kriterler | Süreç | Konu |
|---|---|---|
| Bellek | Kendine ait bir hafıza alanına sahiptir. | Belleği diğer iş parçacıklarıyla paylaşır. |
| Yakın İletişim | Süreçler Arası İletişim (IPC) gerektirir. | Paylaşımlı bellek sayesinde daha kolay. |
| Oluşturma Zamanı | Üretimi daha pahalı. | Hafif ve daha hızlı. |
| Başarısızlık | Süreçteki bir aksaklık başkalarını etkilemez. | İş parçacığı hatası diğer iş parçacıklarını etkileyebilir. |
Örnek: Bir tarayıcı (işlem) birden fazla iş parçacığına sahip olabilir; biri görüntüleme için, diğeri kullanıcı girdisini işlemek için.
4) Senkronizasyon nasıl çalışır? Java?
SyncKronizasyon, paylaşılan bir kaynağa aynı anda yalnızca bir iş parçacığının erişebilmesini sağlayarak, erişimi engeller. yarış koşulları ve veri tutarsızlığı.
MKS synchronized `keyword` bir nesneyi veya bir metodu kilitlemek için kullanılır.
Senkronizasyon türleri:
- SyncKronize Yöntem – tüm yöntemi kilitler.
- Synckrom kaplı Blok – Kodun belirli bir bölümünü kilitler.
Örnek:
synchronized void increment() {
count++;
}
Bu, yalnızca tek bir iş parçacığının değişiklik yapabilmesini sağlar. count
5) Bir konu oluşturmanın farklı yolları nelerdir? Java?
Var iki ana yol ve modern bir yaklaşım:
- Uzatarak
Threadsınıfclass MyThread extends Thread { public void run() { System.out.println("Thread running"); } } new MyThread().start(); - Uygulayarak
Runnablearayüzeyclass MyRunnable implements Runnable { public void run() { System.out.println("Runnable running"); } } new Thread(new MyRunnable()).start(); - kullanma
CallableveFuture(modern yaklaşım) – Sonuç döndürmeye ve istisna fırlatmaya olanak tanır.
6) start() ve run() metotları arasındaki fark nedir? Java İş Parçacığı?
| Görünüş | start() |
run() |
|---|---|---|
| Konu Oluşturma | Yeni bir iş parçacığı oluşturur. | Geçerli iş parçacığında yürütülür. |
| Çağırma | Yeni iş parçacığının zamanlanması için JVM'ye çağrı yapar. | Normal metot çağrısı. |
| eşzamanlılık | Asenkron olarak çalışır. | Sırayla çalışır. |
Örnek: çağrı t.start() yeni bir iş parçacığı başlatır; çağırır t.run() Tıpkı normal bir metot gibi kodu çalıştırır.
7) İplik güvenliği kavramını açıklayın. Bunu nasıl sağlayabilirsiniz?
İş parçacığı güvenliği, birden fazla iş parçacığının paylaşılan verilere bozulmadan erişebilmesini sağlar.
Bu, aşağıdaki gibi senkronizasyon mekanizmaları kullanılarak sağlanır:
synchronizedbloklar/yöntemlervolatileAnahtar kelime- Kilitler (
ReentrantLock,ReadWriteLock) - İş parçacığı güvenli sınıflar (
ConcurrentHashMap,CopyOnWriteArrayList) - Atomic sınıfları (
AtomicInteger,AtomicBoolean)
Örnek:
kullanma AtomicInteger Açık senkronizasyon ihtiyacını ortadan kaldırır:
AtomicInteger count = new AtomicInteger(); count.incrementAndGet();
8) wait(), sleep() ve yield() metotları arasındaki fark nedir?
| Yöntem | Ait olmak | Kilit Açma | Amaç | Süre |
|---|---|---|---|---|
wait() |
Object sınıf |
Evet | Bildirimi bekliyor. | Bildirilene kadar |
sleep() |
Thread sınıf |
Yok hayır | Yürütmeyi duraklatır | Sabit zaman |
yield() |
Thread sınıf |
Yok hayır | Zamanlayıcıyı değiştirmek için ipuçları | Öngörülemeyen |
Örnek: wait() Bu, iş parçacıkları arası iletişim için kullanılırken, sleep() Yalnızca bir iş parçacığını duraklatır.
9) Yürütücü Çerçevesi, iş parçacığı yönetimini nasıl iyileştirir?
Yürütücü Çerçevesi, iş parçacığı oluşturma ve görev gönderme işlemlerini birbirinden ayırarak, iş parçacıklarını bir havuz aracılığıyla verimli bir şekilde yönetir. Bu, aşağıdakilerin bir parçasıdır: java.util.concurrent.
Avantajları:
- Mevcut iş parçacıklarını yeniden kullanır → performansı artırır.
- Esnek iş parçacığı havuzu yönetimi sağlar (
FixedThreadPool,CachedThreadPool, Vb.) - İş parçacığı oluşturma/silme işlemlerinin getirdiği ek yükü azaltır.
Örnek:
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> System.out.println("Task executed"));
executor.shutdown();
10) Kullanılabilir farklı iş parçacığı havuzu türleri nelerdir? Java?
İş parçacığı havuzları, bir dizi çalışan iş parçacığını yönetir ve bunları birden fazla görev için yeniden kullanır.
| İş parçacığı havuzu türü | Yöntem | Tanım |
|---|---|---|
| Sabitİş Parçacığı Havuzu | newFixedThreadPool(n) |
Sabit sayıda iş parçacığı. |
| Önbelleğe Alınmış İş Parçacığı Havuzu | newCachedThreadPool() |
Gerektiğinde iş parçacıkları oluşturur, kullanılmayanları yeniden kullanır. |
| Tek İş Parçacıklı Yürütücü | newSingleThreadExecutor() |
Ardışık görevler için tek bir iş parçacığı. |
| Planlanmışİş Parçacığı Havuzu | newScheduledThreadPool(n) |
Görevleri periyodik olarak veya gecikmeli olarak yürütür. |
| İş Çalma Havuzu | newWorkStealingPool() |
Mevcut işlemcileri dinamik olarak kullanır. |
11) Çıkmaz nedir? JavaBunun önüne nasıl geçilebilir?
A çıkmaz Bu durum, iki veya daha fazla iş parçacığının birbirlerinin kilitlerini serbest bırakmasını süresiz olarak beklemesi ve bunun sonucunda hepsinin bloke olması durumunda ortaya çıkar.
Bu durum genellikle birden fazla iş parçacığının tutarsız bir sırayla kilit elde etmesiyle ortaya çıkar.
Örnek:
synchronized (A) {
synchronized (B) { ... }
}
ve başka bir konu başlığı:
synchronized (B) {
synchronized (A) { ... }
}
Önleme Stratejileri:
- Kilitleri tutarlı bir sırayla edinin.
- Kullanım
tryLock()zaman aşımı ile (ReentrantLock). - Mümkün olduğunca iç içe kilitlerden kaçının.
- Eşzamanlılık yardımcı programlarını kullanın, örneğin
java.util.concurrentmanuel kilitlerin yerine.
12) Senkronize ve Yeniden Girişli Kilit arasındaki fark nedir?
| Özellikler | synchronized |
ReentrantLock |
|---|---|---|
| Menşei | Anahtar kelime | Sınıfta java.util.concurrent.locks |
| Kilit Edinimi | üstü kapalı | Açıkça lock() |
| Anahtarcı | Otomatik | Mutlaka arayın unlock() el ile |
| Deneme/Zaman Aşımı | Müsait değil | Destekler tryLock() ve zaman aşımı |
| Adalet Politikası | yapılandırılamaz | Adil sipariş vermeyi destekler. |
| Koşul Değişkenleri | Desteklenmez | Çoklu destekler Condition nesneler |
Örnek:
ReentrantLock lock = new ReentrantLock();
if(lock.tryLock(1, TimeUnit.SECONDS)) {
try { /* critical section */ } finally { lock.unlock(); }
}
13) Volatil ve senkronize arasındaki fark nedir?
| Görünüş | volatile |
synchronized |
|---|---|---|
| Amaç | Görünürlüğü garanti eder | Atomik yapıyı ve görünürlüğü sağlar. |
| Atombuzlu | garanti değil | Garantili |
| Kilitleme | Yok hayır | Evet |
| Kullanım çantası | İş parçacıkları arasında paylaşılan değişkenler için | Kritik bölümler için |
Örnek:
Kullanım volatile Basit bayraklar için:
volatile boolean running = true;
Kullanım synchronized Bileşik işlemler için:
synchronized void increment() { count++; }
14) ThreadLocal kavramını açıklayın. Java.
ThreadLocal Bu özellik, her iş parçacığının bir değişkenin kendi izole edilmiş kopyasına sahip olduğu, yani iş parçacığına özgü değişkenler sağlar. İş parçacıkları arasında durum paylaşımını önlemek istediğinizde kullanılır.
Örnek:
ThreadLocal<Integer> local = ThreadLocal.withInitial(() -> 0); local.set(local.get() + 1);
Faydaları:
- Değişkenleri izole ederek veri bozulmasını önler.
- Kullanıcı oturumları, işlem kimlikleri veya geçici bağlam verileri için idealdir.
Ancak, yanlış kullanım şunlara yol açabilir: bellek sızıntılarıÖzellikle iş parçacığı havuzlarında temizlenmediği takdirde (remove()).
15) Nedir? Atomic sınıflarında Javave neden kullanılırlar?
Atomic sınıfları (örneğin) AtomicInteger, AtomicBoolean, AtomicReference) sağlamak kilitsiz diş güvenli işlemler tek değişkenler üzerinde kullanarak Karşılaştır ve Değiştir (CAS) mekanizması.
Avantajları:
- Basit güncellemeler için senkronize bloklardan daha iyi performans.
- Açık kilitleme yöntemlerinden kaçının.
Örnek:
AtomicInteger count = new AtomicInteger(0); count.incrementAndGet(); // Atomic increment
Onlar yer almaktadır java.util.concurrent.atomic paketi.
16) nedir SemaphorePeki, bir kilitten farkı nedir?
A Semaphore Belirli sayıda izin kullanarak paylaşılan bir kaynağa erişimi kontrol eder. Genellikle kısıtlı kaynakların kullanımını sınırlamak veya yönetmek için kullanılır.
| Görünüş | Semaphore | kilitlemek |
|---|---|---|
| Amaç | Eş zamanlı erişimi sınırlayın | Karşılıklı dışlama |
| İzinler | Birden fazla olabilir | Sadece bir |
| bloke etme | izin alıyor | mülkiyeti edinir |
| Örnek Kullanım | Bağlantı havuzu | Kritik bölümü koruyun |
Örnek:
Semaphore sem = new Semaphore(3); sem.acquire(); // Access resource sem.release();
17) Çatal/Birleştirme Çerçevesini açıklayın. Java.
MKS Çatal/Birleştirme Çerçevesi içinde tanıtıldı Java 7, özyinelemeli olarak alt görevlere bölünebilen görevlerin paralel yürütülmesi için tasarlanmıştır. Şunları kullanır: iş çalma algoritmasıBoşta kalan iş parçacıklarının, meşgul olan iş parçacıklarından iş "çaldığı" durum.
Örnek:
class SumTask extends RecursiveTask<Integer> {
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();
}
}
Kullanım Örneği: Birleştirme sıralaması (mergesort) veya paralel hesaplama gibi böl ve yönet algoritmaları için idealdir.
18) CompletableFuture, eşzamansız programlamayı nasıl geliştirir? Java 8 +?
CompletableFuture Asenkron programlamayı basitleştirerek olanak tanır engellenmeyen, zincirleme, ve birleştirilebilir Görevleri kolaylaştırır. Geri çağrı karmaşasını ortadan kaldırır.
Örnek:
CompletableFuture.supplyAsync(() -> "Hello")
.thenApply(str -> str + " World")
.thenAccept(System.out::println);
Avantajları:
- Birden fazla eşzamansız görevi birleştirin.
- Zincirleme bağımlı görevler (
thenCompose,thenCombine). - İstisnaları ele alın (
exceptionally).
karşılaştırma:
aksine Future, CompletableFuture Manuel tamamlamaya olanak tanır ve reaktif tarzda zincirleme işlemi destekler.
19) Daemon iş parçacığı nedir? Java?
A Daemon iş parçacığı Arka planda çalışır ve kullanıcı iş parçacıklarına hizmetler sunar (örneğin, çöp toplama, zamanlayıcı görevleri). Kullanıcı iş parçacığı kalmadığında JVM tüm arka plan iş parçacıklarını otomatik olarak sonlandırır.
Örnek:
Thread daemon = new Thread(() -> System.out.println("Daemon running"));
daemon.setDaemon(true);
daemon.start();
özellikleri:
- Arka planda çalışır.
- Ana iş parçacığı sona erdiğinde otomatik olarak sonlandırılır.
- Kritik görevleri yerine getirmemelidir.
20) Çoklu iş parçacığı kullanımı için en iyi uygulamalar nelerdir? Java uygulamalar?
Temel Uygulamalar:
- Yüksek seviyeli eşzamanlılık yardımcı programlarını tercih edin. (
ExecutorService,BlockingQueue(vb.) manuel olarak konu oluşturmak yerine. - Paylaşılan değişken durumdan kaçının veya uygun senkronizasyonla koruyun.
- Değiştirilemez nesneler kullanın. mümkün olan her yerde.
- İş parçacığı kesintilerini ele alın doğru şekilde.
- Yoğun bekleme döngülerinden kaçının.; kullanım
wait(),sleep()ya daCountDownLatch. - Yürütücüleri nazikçe devre dışı bırakın kullanma
shutdown()orshutdownNow(). - Eş zamanlı koleksiyonları kullanın (
ConcurrentHashMap,CopyOnWriteArrayList) senkronize edilmiş sarmalayıcılar üzerinden.
Bu adımların izlenmesi, eş zamanlı olarak ölçeklenebilirlik, güvenlik ve sürdürülebilirliği sağlar. Java programları.
21) Nedir? Java Bellek Modeli (JMM) ve çoklu iş parçacığı (multithreading) uygulamalarında neden önemlidir?
MKS Java Bellek Modeli (JMM) Bu, iş parçacıklarının bellek üzerinden nasıl etkileşim kurduğunu ve bir iş parçacığı tarafından yapılan değişikliklerin diğerleri için nasıl görünür hale geldiğini tanımlar.
Eş zamanlı programlarda tutarlılık ve doğruluğu sağlamak için kurallar tanımlar. görünürlük, sıralama ve atomiklik.
anahtar Concepts:
- Görünürlük: Bir iş parçacığı tarafından yapılan değişikliklerin diğerleri tarafından görülebilmesi gerekir (volatile özelliği yardımcı olur).
- Öncesinde Yaşanan İlişki: Eylemlerin sırasını tanımlar (örneğin, kilit açma işlemi aynı monitörde kilitleme işleminden önce gerçekleşir).
- Yeniden sıralama: JVM ve CPU, senkronize edilmedikleri takdirde komutların sırasını değiştirebilir.
Örnek: olmadan volatileBir iş parçacığındaki bayrak değişikliği başka bir iş parçacığında görünmeyebilir ve bu da öngörülemeyen davranışlara yol açabilir.
22) ConcurrentHashMap ve synchronizedMap arasındaki farkı açıklayın.
İkisi de vida dişlerine dayanıklıdır, ancak EşzamanlıHashMap için tasarlanmıştır yüksek eşzamanlılık ve ölçeklenebilirlik, süre Collections.synchronizedMap() Haritanın tamamını kilitler.
| Özellikler | EşzamanlıHashMap | senkronize harita |
|---|---|---|
| Kilitleme | Segment düzeyinde (kısmi) | Haritanın tamamı |
| Performans | Yüksek düzeyde tartışma konusu | Düşük çekişme altında |
| Boş Anahtarlar/Değerler | İzin yok | İzin verildi |
| yineleyiciler | Zayıf tutarlılık | Hızlı başarısızlık |
| Eşzamanlı Okumalar | İzin verildi | tıkalı |
Örnek: ConcurrentHashMap çoklu iş parçacıklı önbellekler için idealdir, oysa synchronizedMap Küçük veri kümeleri için uygundur.
23) Kilitlenmeleri nasıl tespit edip hata ayıklayabilirsiniz? Java uygulamalar?
Çıkmaz durumlar aşağıdaki yöntemle tespit edilebilir. Konu Dökümleri ve Java tanı araçları.
Yaklaşımlar:
- Konu Dökümü Analizi: Kullanım
jstack <pid>“Bir tane bulundu” tespit etmek Java-seviyesinde çıkmaz." - VisualVM veya JConsole: İş parçacıklarının durumlarını gerçek zamanlı olarak izleyin.
- ThreadMXBean API:
ThreadMXBean bean = ManagementFactory.getThreadMXBean(); long[] ids = bean.findDeadlockedThreads();
Önleme İpucu: Kilitleri her zaman aynı global sırayla edinin ve zaman aşımına dayalı kilitleme (tryLock()) kullanın.
24) Paralel akışlar ve iş parçacıkları arasındaki fark nedir? Java?
Paralel Akımlar dahili olarak kullanın Çatal/Birleştirme Çerçevesi İşlemleri otomatik olarak paralelleştirmek için. Öte yandan, iş parçacıkları manuel yönetim gerektirir.
| Görünüş | Paralel Akımlar | Konular |
|---|---|---|
| Soyutlama | Üst düzey API | Düşük seviyeli kontrol |
| Yönetim | Otomatik | Manuel |
| Ayar | ForkJoinPool'u kullanır. | Özel iş parçacığı havuzu |
| Hata işleme | Sınırlı kontrol | Tam denetim |
Örnek:
list.parallelStream().forEach(System.out::println);
Paralel akışları şu amaçlarla kullanın: veri işlemeAçık senkronizasyon veya zamanlama kontrolü gerektiren görevler için uygun değildir.
25) CountDownLatch, CyclicBarrier ve Phaser'ı aralarındaki farklarla açıklayın.
| Özellikler | Geri Sayım Kilidi | Döngüsel Bariyer | Phaser |
|---|---|---|---|
| Reset | Yok hayır | Evet | Evet |
| Taraflar | Sabit | Sabit | Hareketlilik |
| Kullanım çantası | Görevlerin bitmesini bekleyin. | İpliklerin buluşmasını bekleyin | Dinamik senkronizasyon |
| Örnek E-posta | Tek seferlik etkinlikler | Yeniden kullanılabilir bariyer | Karmaşık görev koordinasyonu |
Örnek:
CountDownLatch latch = new CountDownLatch(3);
for (...) new Thread(() -> { ... latch.countDown(); }).start();
latch.await();
Özet:
- Kullanım
CountDownLatchBir iş parçacığı diğerlerini beklediğinde. - Kullanım
CyclicBarrierİş parçacıkları birbirini beklediğinde. - Kullanım
PhaserÇok fazlı senkronizasyon için.
26) Callable ve Runnable arasındaki fark nedir? Java?
| Görünüş | çalıştırılabilir | Aranabilir |
|---|---|---|
| Geri dönüş değeri | Yok hayır | Evet |
| İstisna işleme | Kontrol edilen istisnalar fırlatılamaz. | Kontrol edilmiş istisnalar fırlatabilir. |
| paket | java.lang |
java.util.concurrent |
Örnek:
Callable<Integer> task = () -> 42; Future<Integer> result = executor.submit(task); System.out.println(result.get());
Kullanım Örneği: Callable İhtiyacınız olduğunda tercih edilir. sonuç or istisna yayılımı.
27) BlockingQueue, üretici-tüketici senaryolarında nasıl yardımcı olur?
BlockingQueue diş güvenliği sağlar engelleme işlemleri Öğelerin eklenmesi ve çıkarılması için, üretici-tüketici modelini basitleştirir.
Örnek:
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10); new Thread(() -> queue.put(1)).start(); // Producer new Thread(() -> System.out.println(queue.take())).start(); // Consumer
Faydaları:
- Açıkça belirtilenleri ortadan kaldırır.
wait()venotify(). - Sınırlı (
ArrayBlockingQueue) ve sınırsız (LinkedBlockingQueue) uygulamaları.
28) İş parçacığı yetersizliği ve kilitlenmenin yaygın nedenleri nelerdir?
İplik Yetersizliği:
Önceliği düşük olan iş parçacıklarının, önceliği yüksek olan iş parçacıklarının baskınlığı nedeniyle hiçbir zaman işlemci zamanı alamaması durumunda ortaya çıkar.
Livelock:
Bu durum, iş parçacıklarının aktif kalmasına rağmen birbirlerine yanıt olarak sürekli durum değiştirmeleri nedeniyle ilerleyememeleri halinde ortaya çıkar (tıpkı koridorda iki kişinin sürekli kenara çekilmesi gibi).
Önleme Teknikleri:
- Aşırı kilitlemeden kaçının.
- Adil kilitler kullanın (
new ReentrantLock(true)). - Bekleme döngülerinden kaçının.
- İş parçacığı zamanlamasını doğru şekilde kullanın.
29) Çoklu iş parçacıklı işlemlerin performansını nasıl iyileştirebilirsiniz? Java uygulamalar?
Anahtar Stratejiler:
- Kullanım iş parçacığı havuzları Sık sık yeni iş parçacıkları oluşturmak yerine.
- Senkronizasyon kapsamını en aza indirin (yalnızca gerekli olanı kilitleyin).
- tercih ederim eşzamanlı veri yapıları.
- Kullanım değişmez nesneler nerede mumkunse.
- İş parçacığına özgü verileri ayırarak yanlış paylaşımı önleyin.
- İşlemci çekirdek sayısına göre iş parçacığı sayısını ayarlayın.
- Kullanım asenkron G/Ç Engelleme görevleri için.
Örnek: Kullanım ForkJoinPool or CompletableFuture CPU kullanımını en üst düzeye çıkarmak için paralel görevler.
30) Gerçek dünyada ele aldığınız çoklu iş parçacığı senaryolarından birini açıklayın. Java.
Senaryo Örneği:
Ödeme işleme sisteminde, tutarlılık ve bütünlük sağlanırken birden fazla işlemin eş zamanlı olarak işlenmesi gerekir.
Uygulama Adımları:
- Kullanılmış Yürütme Hizmeti Çalışan iş parçacıklarını yönetmek için.
- uygulamalı EşzamanlıHashMap İşlem durumlarını korumak için.
- uygulanan Yeniden Giriş Kilidi Hesap düzeyinde kilitleme için.
- Kullanılmış Geri Sayım Kilidi Toplu senkronizasyon için.
- Katma Tamamlanabilir Gelecek Asenkron yanıt işleme için.
Sonuç: Veri aktarım hızı %35 artırıldı ve ortalama işlem gecikmesi %40 azaltıldı.
31) Sanal İş Parçacıkları nedir? JavaPeki, geleneksel ipliklerden farkları nelerdir?
Sanal Konular (tanıtılan Java 21Bunlar, işletim sistemi yerine JVM tarafından yönetilen hafif iş parçacıklarıdır. Eşzamanlılığın getirdiği yükü önemli ölçüde azaltarak binlerce (veya milyonlarca) eşzamanlı görevin yürütülmesini sağlarlar.
| Özellikler | Platform İş Parçacıkları | Sanal Konular |
|---|---|---|
| Tarafından yönetilen | OS | JVM |
| Yaratma Maliyeti | Yüksek | Çok düşük |
| Eşzamanlılık Düzeyi | Sınırlı sayıda (~binlerce) | Devasa (~milyonlarca) |
| Çizelgeleme | İşletim sistemi düzeyi | JVM işbirlikçi |
| Kullanım çantası | CPU'ya bağlı görevler | G/Ç yoğun veya yüksek eşzamanlılık gerektiren görevler |
Örnek:
Thread.startVirtualThread(() -> System.out.println("Virtual thread running"));
Anahtar Avantaj:
Sanal iş parçacıkları, sistem kaynaklarını bloke etmeden büyük ölçekte eş zamanlı yürütmeye olanak tanır.
32) Yapılandırılmış eşzamanlılık nedir? Java? Neden önemli?
Yapılandırılmış Eşzamanlılık (önizleme) Java 21) birden fazla eşzamanlı görevi tek bir işlem olarak ele alarak çoklu iş parçacıklı programlamayı basitleştirir. tek yapılandırılmış birimBu, görevlerin birlikte başlatılmasını, yönetilmesini ve sonlandırılmasını sağlayarak güvenilirliği ve okunabilirliği artırır.
Örnek:
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
Future<String> user = scope.fork(() -> findUser());
Future<Integer> order = scope.fork(() -> fetchOrderCount());
scope.join();
scope.throwIfFailed();
System.out.println(user.resultNow() + " has " + order.resultNow() + " orders.");
}
Faydaları:
- İptal ve hata yayılımı daha kolay.
- Yetim kalmış iş parçacığı yok.
- Öngörülebilir görev yaşam döngüsü.
33) Reaktif Akışlar Nedir? JavaPeki eşzamanlılığı nasıl artırıyorlar?
Reaktif Akışlar sağlamak engellenmeyen, eşzamanlı olmayan Veri akışlarını işlemek için geri basınç tabanlı model.
onlar için tasarlanmıştır yüksek verimli, olaya dayalı sistemler.
Çekirdek Arayüzler:
Publisher– veri üretir.Subscriber– Veri tüketir.Subscription– Geri basıncı kontrol eder.Processor– hem bu işlevleri yerine getirir hem de ikisini birden yapar.
Örnek:
Flow.Publisher<Integer> publisher = subscriber -> subscriber.onNext(42);
Kullanım Durumları:
Reaktif Akışlar, aşağıdakiler için temel teşkil eder: Proje Reaktörü, RxJava, ve Spring WebFluxÖlçeklenebilir API'ler ve mikro hizmetler mümkün kılınmıştır.
34) İş parçacığı kesintilerini nasıl doğru şekilde ele alırsınız? Java?
İş parçacığı kesintisi, bir iş parçacığına durması veya davranışını değiştirmesi gerektiği sinyalini vermeyi sağlar.
En İyi Uygulamalar:
- her zaman kontrol et
Thread.interrupted()döngüler halinde. - Çıkmadan önce kaynakları temizleyin.
- Bastırmayın
InterruptedException.
Örnek:
while (!Thread.currentThread().isInterrupted()) {
try { Thread.sleep(1000); }
catch (InterruptedException e) {
Thread.currentThread().interrupt(); // restore flag
break;
}
}
Yaygın Hata:
Yakalama işleminden sonra kesinti durumunu geri yükleme başarısız oldu. InterruptedException.
35) Paralellik ve eşzamanlılık arasındaki farkı açıklayın.
Her ne kadar sıklıkla birbirinin yerine kullanılsa da, paralellik ve eşzamanlılık Farklı yürütme modellerine bakın.
| Konsept | Tanım | Örnek E-posta |
|---|---|---|
| eşzamanlılık | Görevleri birbirine eş zamanlı olarak yürüterek birden fazla görevi yönetmek. | Aynı anda 1000 müşteri isteğini işlemek |
| paralellik | Aynı anda birden fazla görevi yürütmek | Birden fazla CPU çekirdeğinde hesaplamalar yürütmek |
Analoji: Eşzamanlılık about structure (birçok şeyle ilgilenirken), paralellik ise about execution (aynı anda birçok şey yapmak).
36) Yaygın olarak kullanılan tehdit profilleme araçları ve teknikleri nelerdir? Java?
Kilitlenme, engelleme ve işlemciyi aşırı kullanma gibi iş parçacığı sorunlarını teşhis etmek için çeşitli yöntemler kullanabilirsiniz. profilleme araçları.
| araç | Amaç |
|---|---|
| jstack | İş parçacığı dökümünü yakalar |
| jconsole / VisualVM | Gerçek zamanlı iş parçacığı izleme |
| Java Uçuş Kayıt Cihazı (JFR) | Üretim için düşük maliyetli profil oluşturma |
| Görev Kontrol Merkezi (JMC) | JFR kayıtlarını görselleştirir. |
| asenkron-profilleyici | CPU ve tahsis profillemesi |
| ThreadMXBean | Programatik iş parçacığı denetimi |
Örnek (ThreadMXBean):
ThreadMXBean bean = ManagementFactory.getThreadMXBean(); System.out.println(bean.getThreadCount());
37) Çoklu iş parçacığı kullanımında sık karşılaşılan performans darboğazları nelerdir? Java uygulamalar?
Tipik Darboğazlar:
- Aşırı Kilit Çekişmesi: Birden fazla iş parçacığı aynı kilit için rekabet ediyor.
- Yanlış Paylaşım: İş parçacıkları, aynı CPU önbellek satırını paylaşan değişkenleri değiştirir.
- Bağlam Değiştirme Ek Yükü: Çok fazla iş parçacığı planlama gecikmelerine yol açar.
- uygunsuz Synckronizasyon: Engellemeye veya kilitlenmelere yol açar.
- Hafıza Engelleri: Değişkenlerin aşırı kullanımı.
optimizasyonları:
- İnce taneli veya kilitsiz yapılar kullanın.
- İş parçacığı oluşturulmasını en aza indirin.
- İzole edilmiş veriler için iş parçacığına özgü depolama kullanın.
- Optimizasyondan önce profil oluşturma.
38) Kilitlenme gerektirmeyen, bekleme gerektirmeyen ve engelleme gerektirmeyen algoritmalar arasındaki fark nedir?
| Menşei | Tanım | Teminatlar |
|---|---|---|
| Kilitsiz | En azından bir konuda ilerleme kaydedildi. | Sistem genelinde ilerleme. |
| Bekleme Yok | Her iş parçacığı sınırlı adımlarla ilerler. | En güçlü garanti. |
| Engelsiz | Tartışmanın olmadığı ortamda ilerleme. | En zayıf garanti. |
Örnek: AtomicInteger operasyonlar Kilit serbestÖte yandan, engelleme kuyrukları kilit kullanır.
Kullanım Örneği: Kilitlenme gerektirmeyen algoritmalar şunlar için idealdir: yüksek performanslı eşzamanlı veri yapıları Disruptor veya ConcurrentLinkedQueue gibi.
39) Nasıl Java ForkJoinPool arka planda nasıl çalışıyor?
ForkJoinPool için tasarlanmıştır böl ve fethet görevler ve kullanımlar iş hırsızlığı İş yükünü iş parçacıkları arasında dengelemek.
Mekanizması:
- Her bir işçi iş parçacığı kendi çift uçlu kuyruğunu (deque) tutar.
- Boşta kaldığında, diğer iş parçacıklarının çift uçlu kuyruklarından görevleri çalar.
- Çatışmayı en aza indirir ve verimliliği artırır.
Örnek:
ForkJoinPool pool = new ForkJoinPool(); pool.submit(() -> IntStream.range(0, 100).parallel().forEach(System.out::println));
Yarar: Özyinelemeli ve paralelleştirilebilir iş yükleri (sıralama, hesaplama, veri dönüştürme) için idealdir.
40) Yüksek oranda eş zamanlı işlem yapabilen bir sistemi nasıl tasarlardınız? Java Saniyede milyonlarca isteği işleyen bir sistem mi?
Örnek E-posta Archidoku:
Yüksek verimlilik, dayanıklılık ve ölçeklenebilirlik ile birlikte büyük ölçekli eşzamanlılık elde etmek için:
- Sanal İş Parçacıklarını Kullanın Hafif istek işleme için.
- Reaktif Akışları Kullanın Asenkron G/Ç işlemleri için.
- Yapılandırılmış Eşzamanlılığı Benimseyin Yönetilebilir paralel görevler için.
- Sık erişilen verileri önbelleğe al kullanma
ConcurrentHashMaporCaffeine. - İş parçacığı güvenli kuyrukları kullanın. (
Disruptor,BlockingQueue) olay geçişi için. - İzleyin ve ayarlayın JFR + JMC ile.
- Tamamlanabilir Geleceği Kaldıraçla Asenkron iş akışları için.
Sonuç: Sistem, minimum engelleme ve optimize edilmiş kaynak kullanımıyla milyonlarca eş zamanlı bağlantıya ulaşmaktadır.
🔍 Üst Java Gerçek Dünya Senaryoları ve Stratejik Yanıtlarla Çoklu İşlem Yaparak Mülakat Soruları
Aşağıda on adet gerçekçi ve sıkça sorulan soru bulunmaktadır. Java Çok iş parçacığı Mülakat soruları, mülakatçının beklentileri ve güçlü örnek cevaplar.
1) Bir işlem ile bir iş parçacığı arasındaki fark nedir? Java?
Adaydan beklenenler: İşletim sistemi ve JVM temelleri, bellek kullanımı ve yürütme akışı konularında bilgi sahibi olduğunuzu gösterin.
Örnek cevap: Bir işlem, kendi bellek alanına sahip bağımsız bir programdır; iş parçacığı ise bir işlem içinde çalışan daha küçük bir yürütme birimidir. İş parçacıkları, işlemin aynı belleğini ve kaynaklarını paylaşır; bu da bağlam değiştirme işlemini hızlandırır ve performansı artırır. Bu paylaşımlı bellek modeli, verimli iletişime olanak tanır ancak yarış koşullarını önlemek için dikkatli senkronizasyon gerektirir.
2) Synchronized anahtar kelimesinin amacını ve ne zaman kullanılması gerektiğini açıklayabilir misiniz?
Adaydan beklenenler: Eşzamanlılık kontrolü, içsel kilitler ve iş parçacığı güvenliği konularını açıklayabilme yeteneği.
Örnek cevap: MKS synchronized `sync` anahtar kelimesi, kritik bir kod bölümüne aynı anda yalnızca bir iş parçacığının erişebilmesini sağlar. Paylaşılan, değiştirilebilir verilere birden fazla iş parçacığı tarafından erişildiğinde kullanılır. Bir nesnenin monitör kilidinde senkronizasyon yaparak, geliştiriciler yarış koşullarını önler ve veri bütünlüğünü korur.
3) Karşılaştığınız zorlu bir çoklu iş parçacığı sorununu ve nasıl çözdüğünüzü açıklayın.
Adaydan beklenenler: Problem çözme, hata ayıklama becerileri ve gerçek dünya eşzamanlılık deneyimi.
Örnek cevap: Önceki görevimde, iki iş parçacığının ters sırada kilit beklemesinden kaynaklanan bir kilitlenme sorunuyla karşılaştım. Kodu, tutarlı bir kilit edinme sırası sağlamak üzere yeniden yapılandırarak sorunu çözdüm. Bu, iş parçacıklarının kilitleri aynı sırayla elde etmesini garanti altına aldı ve kilitlenme riskini ortadan kaldırdı.
4) Nasıl Java Bellek modeli, çok iş parçacıklı uygulamalarda görünürlüğü ve sıralamayı sağlar mı?
Adaydan beklenenler: JMM kavramlarına ilişkin bilgi, volatileÖncesinde gerçekleşen ilişkiler.
Örnek cevap: MKS Java Bellek Modeli, bir iş parçacığı tarafından yapılan değişikliklerin diğer iş parçacıkları tarafından nasıl ve ne zaman görünür hale geleceğine dair kurallar tanımlar. Sıralamayı garanti eden "önce gerçekleşme" ilişkilerini kullanır. volatile Bu, yazma işlemlerinin ana belleğe aktarılmasını ve okuma işlemlerinin her zaman en son değeri getirmesini sağlar. SyncKronizasyon yapıları aynı zamanda "önce gerçekleşir" sınırları da oluşturur.
5) wait(), notify() ve notifyAll() fonksiyonları arasındaki fark nedir?
Adaydan beklenenler: İş parçacıkları arası iletişim ve nesne izleme mekaniğinin anlaşılması.
Örnek cevap: MKS wait() Bu yöntem, bir iş parçacığının monitör kilidini serbest bırakmasına ve bildirim gelene kadar yürütmeyi askıya almasına neden olur. notify() Bu yöntem, bekleyen tek bir iş parçacığını uyandırır. notifyAll() Aynı monitörde bekleyen tüm iş parçacıklarını uyandırır. Bu yöntemler, paylaşılan duruma bağlı iş parçacıkları arasındaki koordinasyonu kolaylaştırır.
6) Çoklu iş parçacıklı bir uygulamanın performansını optimize etmeniz gereken bir durumu açıklayın.
Adaydan beklenenler: Eş zamanlılık performansını ölçme, teşhis etme ve iyileştirme yeteneği.
Örnek cevap: Önceki görevimde, verimlilik darboğazları yaşayan çok iş parçacıklı bir veri işleme sistemini optimize ettim. Paylaşılan bir kaynak üzerinde aşırı kilit çekişmesi olduğunu keşfettim. Bunu, senkronize bloğu başka bir şeyle değiştirerek çözdüm. ConcurrentHashMapBu durum, çekişmeyi azalttı ve paralel işlem verimliliğini önemli ölçüde artırdı.
7) Birden fazla iş parçacığının paylaşılan bir veri yapısını güvenli bir şekilde güncellemesi gereken bir durumu nasıl ele alırdınız?
Adaydan beklenenler: Eş zamanlı koleksiyonlar, kilitler ve tasarım stratejileri hakkında bilgi sahibi olmak.
Örnek cevap: Birden fazla iş parçacığının paylaşılan bir veri yapısını güncellemesi gerekiyorsa, iş parçacığı güvenli bir koleksiyon seçerdim. java.util.concurrentGibi ConcurrentLinkedQueue or ConcurrentHashMapAlternatif olarak, açık kilitleme yöntemini kullanırdım. ReentrantLock Daha ayrıntılı kontrol gerekiyorsa, bu yaklaşım veri tutarlılığını sağlar ve eşzamanlılık hatalarını önler.
8) ExecutorService'in rolü nedir ve neden manuel olarak iş parçacığı oluşturmaya tercih edilir?
Adaydan beklenenler: İş parçacığı havuzlama, yaşam döngüsü yönetimi ve ölçeklenebilirlik konularında bilgi sahibi olmak.
Örnek cevap: ExecutorService Çalışan iş parçacıklarından oluşan bir havuzu yönetir ve görevleri verimli bir şekilde planlar. İş parçacıklarını yeniden kullanarak ek yükü azalttığı, ölçeklenebilirliği artırdığı ve yaşam döngüsü yönetimini basitleştirdiği için tercih edilir. Ayrıca iş parçacıklarını kapatmak ve görev tamamlanmasını ele almak için temiz mekanizmalar sağlar.
9) Yarış koşulu (race condition) sorununu gidermek zorunda kaldığınız bir durumu anlatın. Bu sorunu nasıl tespit edip düzelttiniz?
Adaydan beklenenler: Teşhis teknikleri, kayıt tutma, hata ayıklama araçları.
Örnek cevap: Önceki işimde, yük altında tutarsız çıktılar fark ettikten sonra bir finansal hesaplama modülünde bir yarış durumu tespit ettim. Stres testi ve iş parçacığı erişim modellerini izlemek için gelişmiş günlük kaydı kullanarak sorunu yeniden oluşturdum. Paylaşılan hesaplama bloğu etrafında uygun senkronizasyon sağlayarak tutarsız davranışı ortadan kaldırdım.
10) Görevlerin öncelikleri ve yürütme süreleri farklı olduğunda çoklu iş parçacığı çözümünü nasıl tasarlarsınız?
Adaydan beklenenler: Eşzamanlılık çözümleri tasarlama ve uygun API'leri seçme yeteneği.
Örnek cevap: Bu senaryoda, öncelikli bir görev kuyruğu kullanırdım. ThreadPoolExecutor ve özel bir Comparator Öncelikli görevlerin önce yürütülmesini sağlamak için. Süreleri değişken olan görevler için, iş parçacığı havuzunun boyutunu CPU çekirdeklerine göre belirler ve kuyruk boyutunu ve reddetme stratejilerini ayarlamak için izleme araçları kullanırdım.
