La programmation multithread Java implique la création et la gestion de threads pour permettre une exécution simultanée. Il couvre les concepts de base des threads, de la synchronisation, des pools de threads et des exemples pratiques : Les threads sont des processus légers qui partagent l'espace mémoire et permettent une exécution simultanée. La synchronisation sécurise l'accès aux ressources partagées via des verrous ou des opérations atomiques. Les pools de threads gèrent les threads, améliorent les performances et réduisent les frais de création et de destruction. Un exemple pratique utilise le multithreading pour analyser les fichiers d'un répertoire en parallèle.
Points de connaissances essentiels pour les entretiens de programmation multithread Java
1. Le concept de base des threads
Exemple de code :
class MyThread extends Thread { public void run() { System.out.println("This is a thread"); } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); } }
2. Synchronisation des threads
Exemple de code (utilisant synchronisé) :
class Counter { private int count; public synchronized void increment() { count++; } public synchronized int getCount() { return count; } } public class Main { public static void main(String[] args) { Counter counter = new Counter(); Thread thread1 = new Thread(() -> { for (int i = 0; i < 10000; i++) { counter.increment(); } }); Thread thread2 = new Thread(() -> { for (int i = 0; i < 10000; i++) { counter.increment(); } }); thread1.start(); thread2.start(); thread1.join(); thread2.join(); System.out.println(counter.getCount()); // 输出:20000 } }
3. Pool de threads
Exemple de code (utilisant ThreadPoolExecutor) :
ExecutorService executor = Executors.newFixedThreadPool(5); for (int i = 0; i < 10; i++) { executor.submit(() -> { System.out.println("This is a thread from the pool"); }); } executor.shutdown();
4. Cas pratique : analyse de fichiers
Exemple de code :
import java.io.File; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FileScanner { private static void scan(File dir) { File[] files = dir.listFiles(); if (files == null) return; ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); for (File f : files) { executor.submit(() -> { if (f.isDirectory()) scan(f); else System.out.println(f.getAbsolutePath()); }); } executor.shutdown(); } public static void main(String[] args) { File root = new File("..."); // 替换为要扫描的目录 scan(root); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!