JAVA 핵심 동시성 프로그래밍 모델 실용 가이드
오늘날의 소프트웨어 개발 분야에서는 멀티 코어 프로세서와 분산 시스템이 주류가 되었습니다. 하드웨어 자원을 최대한 활용하려면 병렬 처리를 달성하고 성능을 향상시키는 동시 프로그램을 작성해야 합니다. 주류 프로그래밍 언어인 JAVA는 풍부한 동시 프로그래밍 모델 및 도구 세트를 제공합니다. 이 기사에서는 몇 가지 특정 코드 예제를 통해 JAVA의 핵심 동시 프로그래밍 모델을 심층적으로 이해하고 이러한 모델을 사용하여 동시 프로그래밍을 연습하는 방법을 배울 수 있습니다.
public class MyThread extends Thread { @Override public void run() { System.out.println("Hello, this is my thread!"); } public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); } }
이 예에서는 Thread에서 상속되는 사용자 정의 스레드 클래스 MyThread를 만들고 run 메서드에서 간단한 메시지를 출력하도록 run 메서드를 다시 작성합니다. 기본 메소드에서는 MyThread 인스턴스를 생성하고 start 메소드를 통해 스레드를 시작합니다.
public class MyRunnable implements Runnable { @Override public void run() { System.out.println("Hello, this is my runnable!"); } public static void main(String[] args) { Thread myThread = new Thread(new MyRunnable()); myThread.start(); } }
이 예에서는 Runnable 인터페이스를 구현하는 사용자 정의 클래스 MyRunnable을 만들고 run 메서드를 재정의했습니다. 기본 메소드에서는 Thread 객체를 생성하고 MyRunnable 인스턴스를 매개변수로 전달한 다음 start 메소드를 통해 스레드를 시작합니다.
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(3); for (int i = 0; i < 5; i++) { Runnable worker = new WorkerThread("" + i); executor.execute(worker); } executor.shutdown(); while (!executor.isTerminated()) { } System.out.println("Finished all threads"); } } class WorkerThread implements Runnable { private String message; public WorkerThread(String s) { this.message = s; } public void run() { System.out.println(Thread.currentThread().getName() + " (Start) message = " + message); processMessage(); System.out.println(Thread.currentThread().getName() + " (End)"); } private void processMessage() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }
이 예에서는 Executors 유틸리티 클래스를 사용하여 고정 크기 3의 스레드 풀을 만듭니다. 그런 다음 WorkerThread 인스턴스 5개를 생성하여 스레드 풀에 제출했습니다. 스레드 풀은 이러한 스레드의 실행을 관리합니다.
public class Counter { private int count = 0; public synchronized void increment() { count++; } public synchronized void decrement() { count--; } public synchronized int getCount() { return count; } }
이 예에서는 증가, 감소 및 getCount 메소드가 모두 동기화 키워드를 사용하여 동기화를 수행하는 Counter 클래스를 만들었습니다. 이렇게 하면 여러 스레드에서 이러한 메서드를 호출하는 것이 안전해집니다.
또한 JAVA의 동시성 패키지는 ReentrantLock 및 ReadWriteLock과 같은 다중 잠금 구현도 제공합니다. 다음은 ReentrantLock을 사용하는 예입니다.
import java.util.concurrent.locks.ReentrantLock; public class ReentrantLockExample { private final ReentrantLock lock = new ReentrantLock(); public void performTask() { lock.lock(); try { // 执行需要同步的代码块 } finally { lock.unlock(); } } }
이 예에서는 ReentrantLock의 인스턴스를 생성하고 잠금 및 잠금 해제를 사용하여 중요 섹션을 잠그거나 잠금 해제합니다. 이 방법은 동기화된 키워드보다 더 유연하며 잠금 획득 및 해제를 수동으로 제어할 수 있습니다.
import java.util.concurrent.ConcurrentHashMap; public class ConcurrentMapExample { private ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>(); public void addKeyValuePair(String key, String value) { map.put(key, value); } public String getValueByKey(String key) { return map.get(key); } }
이 예에서는 ConcurrentHashMap 인스턴스를 생성하고 put 및 get 메소드를 사용하여 추가 동기화 작업 없이 맵의 데이터를 안전하게 조작합니다.
위의 예를 통해 우리는 스레드 기본, 스레드 풀, 잠금 및 동기화, 동시 수집을 포함하여 JAVA의 핵심 동시 프로그래밍 모델을 심층적으로 이해했습니다. 실제 프로젝트에서는 이러한 동시 프로그래밍 모델을 합리적으로 사용하면 프로그램 성능과 안정성을 향상시킬 수 있습니다. 이 글이 독자들이 JAVA 동시성 프로그래밍에 대한 지식을 더 잘 익히고 실제로 효율적인 동시성 프로그램을 작성하는 데 도움이 되기를 바랍니다.
위 내용은 JAVA 핵심 동시성 프로그래밍 모델에 대한 실용 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!