Java マルチスレッド プログラミングには、同時実行を可能にするスレッドの作成と管理が含まれます。スレッド、同期、スレッド プールの基本概念、および実際の例について説明します。スレッドは、メモリ空間を共有し、同時実行を可能にする軽量のプロセスです。同期は、ロックまたはアトミック操作を通じて共有リソースへのアクセスを保護します。スレッド プールはスレッドを管理し、パフォーマンスを向上させ、作成と破棄のオーバーヘッドを削減します。実際の例では、マルチスレッドを使用してディレクトリ内のファイルを並行してスキャンします。
#Java マルチスレッド プログラミングのインタビューにおける重要な知識ポイント
1. スレッドの基本概念
コード例:
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. スレッド同期
コード例 (同期を使用):
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. スレッド プール
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();
複数のスレッドを使用して、大きなディレクトリ内のファイルを並行してスキャンします。
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);
}
}
以上がJava マルチスレッド プログラミングの面接における重要な知識ポイントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。