>  기사  >  Java  >  Java에서 동시 매핑 작업에 ConcurrentHashMap 함수를 사용하는 방법

Java에서 동시 매핑 작업에 ConcurrentHashMap 함수를 사용하는 방법

WBOY
WBOY원래의
2023-06-26 17:48:16995검색

멀티 코어 프로세서가 확산되면서 컴퓨터 애플리케이션의 동시 프로그래밍이 점점 더 중요한 기술이 되었습니다. Java에서 ConcurrentHashMap은 스레드 안전성을 보장하면서 동시 액세스 요구 사항을 충족할 수 있는 효율적인 동시 매핑 테이블 데이터 구조입니다. 이 기사에서는 Java에서 ConcurrentHashMap 함수를 사용하여 동시 매핑 작업을 수행하는 방법을 소개합니다.

ConcurrentHashMap은 Java 5에 도입된 스레드로부터 안전한 해시 테이블 구현입니다. Hashtable 및SynchronizedMap과 비교하여 동시성 성능이 더 좋습니다. Hashtable 및SynchronizedMap과 유사하게 ConcurrentHashMap도 키-값 쌍의 매핑 테이블이지만 잠금 경쟁을 줄이기 위해 분할된 잠금 기술을 사용합니다.

Java에서 ConcurrentHashMap을 사용하는 것은 쉽습니다. 먼저 java.util.concurrent.ConcurrentHashMap 패키지를 가져온 다음 ConcurrentHashMap 개체를 만들어야 합니다.

import java.util.concurrent.ConcurrentHashMap;

ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();

위 코드에서는 키-값 쌍을 저장하기 위해 ConcurrentHashMap 개체를 만들었습니다. 여기서 키 유형은 String이고 값 유형은 Integer입니다.

공통적으로 사용되는 ConcurrentHashMap 함수
ConcurrentHashMap에서 자주 사용되는 함수와 사용법은 다음과 같습니다.

  1. put()
    지정된 키-값 쌍을 ConcurrentHashMap에 추가합니다. 지정된 키가 이미 존재하는 경우 해당 값이 업데이트되고 이전 값이 반환됩니다. 지정된 키가 없으면 새 키-값 쌍이 추가되고 null이 반환됩니다.

    Integer oldValue = map.put("a", 1); // 添加键值对a=1,返回null
    Integer value = map.put("b", 2); // 添加键值对b=2,返回null
    Integer newValue = map.put("a", 3); // 更新键值对a=3,返回旧值1
  2. get()
    지정된 키에 해당하는 값을 가져옵니다. 키가 존재하지 않으면 null을 반환합니다.

    Integer value = map.get("a"); // 获取键a对应的值3
  3. remove()
    지정된 키-값 쌍을 삭제합니다. 키가 존재하지 않으면 null을 반환합니다.

    Integer value = map.remove("a"); // 删除键a对应的键值对,返回值3
  4. replace()
    지정된 키에 해당하는 값을 바꿉니다. 키가 존재하지 않으면 null을 반환합니다.

    Integer oldValue = map.replace("b", 4); // 替换键b对应的值为4,返回旧值2
  5. putIfAbsent()
    지정된 키가 존재하지 않으면 새 키-값 쌍을 추가하고 null을 반환합니다. 지정된 키가 이미 존재하는 경우 해당 값이 반환됩니다.

    Integer oldValue = map.putIfAbsent("a", 5); // putIfAbsent会判断键a是否存在,因为键a已经存在于ConcurrentHashMap中,此次添加操作不会执行,返回a对应的旧值3
    Integer value = map.putIfAbsent("c", 6); // putIfAbsent会判断键c是否存在,因为键c不存在于ConcurrentHashMap中,此次添加键值对c=6操作会执行,返回null
  6. size()
    ConcurrentHashMap의 키-값 쌍 수를 가져옵니다.

    int size = map.size(); // 获取ConcurrentHashMap中键值对的数量
  7. clear()
    ConcurrentHashMap에서 모든 키-값 쌍을 삭제합니다.

    map.clear(); // 删除ConcurrentHashMap中的所有键值对

예제 코드
다음은 동시 매핑 작업에 ConcurrentHashMap 함수를 사용하는 방법을 보여주는 간단한 예입니다. 이 예에서는 여러 스레드를 시작하여 ConcurrentHashMap에 키-값 쌍을 추가하고 키-값 쌍에 동시에 액세스합니다.

import java.util.concurrent.ConcurrentHashMap;

public class ConcurrentHashMapDemo {
    public static void main(String[] args) throws InterruptedException {
        ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();

        // 添加键值对的线程
        Thread addThread = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                map.put(String.valueOf(i), i);
            }
        });

        // 访问键值对的线程
        Thread visitThread = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                Integer value = map.get(String.valueOf(i));
                System.out.println(Thread.currentThread().getName() + " " + value);
            }
        });

        addThread.start();
        visitThread.start();

        addThread.join();
        visitThread.join();
    }
}

이 예에서는 두 개의 스레드를 시작합니다. 하나의 스레드는 ConcurrentHashMap에 키-값 쌍을 추가하는 데 사용되고 다른 스레드는 키-값 쌍에 액세스하는 데 사용됩니다. 액세스 스레드에서는 ConcurrentHashMap의 get() 함수를 사용하여 키-값 쌍의 값을 얻습니다.

출력 결과는 다음과 같습니다.

Thread-1 0
Thread-1 1
Thread-1 2
Thread-1 3
Thread-1 4
.
.
.
Thread-1 97
Thread-1 98
Thread-1 99

추가 스레드와 액세스 스레드가 동시에 실행되고 스레드 간 경쟁이 없음을 알 수 있습니다. ConcurrentHashMap은 스레드 안전성과 높은 동시성 성능을 보장합니다.

요약
이 글에서는 Java에서 ConcurrentHashMap 함수를 사용하여 동시 매핑 작업을 수행하는 방법을 소개합니다. ConcurrentHashMap을 사용하면 프로그램의 동시성 성능을 향상시키고 다중 스레드 시나리오에서 스레드 안전성을 보장할 수 있습니다. 동시성이 높은 네트워크 애플리케이션을 개발하든 대규모 데이터를 처리하는 분산 시스템을 개발하든 ConcurrentHashMap은 매우 실용적인 도구입니다.

위 내용은 Java에서 동시 매핑 작업에 ConcurrentHashMap 함수를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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