Maison > Java > javaDidacticiel > Points de connaissances essentiels pour les entretiens de programmation multithread Java

Points de connaissances essentiels pour les entretiens de programmation multithread Java

PHPz
Libérer: 2024-04-12 10:48:01
original
1121 Les gens l'ont consulté

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

Points de connaissances essentiels pour les entretiens de programmation multithread Java

1. Le concept de base des threads

  • Les threads sont des processus légers dans le système d'exploitation et partagent le même espace mémoire avec les processus.
  • Les threads permettent d'exécuter plusieurs tâches indépendantes simultanément dans le même programme.

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();
    }
}
Copier après la connexion

2. Synchronisation des threads

  • La synchronisation des threads garantit que les courses de données sont évitées lors de l'accès aux ressources partagées.
  • La synchronisation peut être réalisée en utilisant un mécanisme de verrouillage ou des opérations atomiques.

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
    }
}
Copier après la connexion

3. Pool de threads

  • Le pool de threads est un ensemble de ressources qui gèrent les threads.
  • Il améliore les performances et réduit les frais généraux liés à la création et à la destruction 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();
Copier après la connexion

4. Cas pratique : analyse de fichiers

  • Utiliser le multi-threading pour analyser des fichiers dans un grand répertoire en parallèle.

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);
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal