>  기사  >  Java  >  Java 멀티스레드 프로그래밍 인터뷰를 위한 필수 지식 포인트

Java 멀티스레드 프로그래밍 인터뷰를 위한 필수 지식 포인트

PHPz
PHPz원래의
2024-04-12 10:48:011045검색

Java 다중 스레드 프로그래밍에는 동시 실행이 가능하도록 스레드를 생성하고 관리하는 작업이 포함됩니다. 스레드, 동기화, 스레드 풀 및 실제 예제의 기본 개념을 다룹니다. 스레드는 메모리 공간을 공유하고 동시 실행을 허용하는 경량 프로세스입니다. 동기화는 잠금 또는 원자성 작업을 통해 공유 리소스에 대한 액세스를 보호합니다. 스레드 풀은 스레드를 관리하고, 성능을 향상시키며, 생성 및 삭제 오버헤드를 줄입니다. 실제 예에서는 멀티스레딩을 사용하여 디렉터리의 파일을 병렬로 검색합니다.

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. 스레드 풀

  • 스레드 풀은 스레드를 관리하는 리소스 집합입니다.
  • 성능을 향상시키고 스레드 생성 및 삭제에 따른 오버헤드를 줄입니다.

코드 샘플(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. 실제 사례: 파일 검색

  • 멀티스레딩을 사용하여 대규모 디렉터리의 파일을 병렬로 검색합니다.

코드 예:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.