산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 ConcurrentHashMap

자바 ConcurrentHashMap

이 자습서에서는 예제를 통해 Java ConcurrentHashMap 클래스와 해당 작업에 대해 알아봅니다.

ConcurrentHashMap Java 컬렉션 프레임워크의 클래스는 스레드로부터 안전한 맵을 제공합니다. 즉, 여러 스레드가 지도 항목의 일관성에 영향을 주지 않고 한 번에 지도에 액세스할 수 있습니다.

ConcurrentMap 인터페이스를 구현합니다.

<시간>

ConcurrentHashMap 만들기

동시 해시맵을 생성하려면 java.util.concurrent.ConcurrentHashMap을 가져와야 합니다. 먼저 패키지. 패키지를 가져온 후 Java에서 동시 해시맵을 만드는 방법은 다음과 같습니다.

// ConcurrentHashMap with capacity 8 and load factor 0.6
ConcurrentHashMap<Key, Value> numbers = new ConcurrentHashMap<>(8, 0.6f);

위의 코드에서 numbers라는 동시 해시맵을 만들었습니다. .

여기,

new ConcurrentHashMap<>(8, 0.6) 부분을 확인하세요. . 여기서 첫 번째 매개변수는 용량입니다. 두 번째 매개변수는 loadFactor입니다. .

기본 용량 및 부하율

용량과 부하율을 정의하지 않고 동시 해시맵을 생성하는 것이 가능합니다. 예를 들어,

// ConcurrentHashMap with default capacity and load factor
ConcurrentHashMap<Key, Value> numbers1 = new ConcurrentHashMap<>();

기본적으로

<시간>

다른 지도에서 ConcurrentHashMap 만들기

다음은 다른 맵의 모든 요소를 ​​포함하는 동시 해시맵을 만드는 방법입니다.

import java.util.concurrent.ConcurrentHashMap;
import java.util.HashMap;

class Main {
    public static void main(String[] args) {

        // Creating a hashmap of even numbers
        HashMap<String, Integer> evenNumbers = new HashMap<>();
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);
        System.out.println("HashMap: " + evenNumbers);

        // Creating a concurrent hashmap from other map
        ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>(evenNumbers);
        numbers.put("Three", 3);
        System.out.println("ConcurrentHashMap: " + numbers);
    }
}

출력

HashMap: {Four=4, Two=2}
ConcurrentHashMap: {Four=4, Two=2, Three=3}
<시간>

ConcurrentHashMap의 메소드

ConcurrentHashMap 클래스는 지도에서 다양한 작업을 수행할 수 있는 메서드를 제공합니다.

<시간>

ConcurrentHashMap에 요소 삽입

예를 들어,

import java.util.concurrent.ConcurrentHashMap;

class Main {
    public static void main(String[] args) {
        // Creating ConcurrentHashMap of even numbers
        ConcurrentHashMap<String, Integer> evenNumbers = new ConcurrentHashMap<>();

        // Using put()
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);

        // Using putIfAbsent()
        evenNumbers.putIfAbsent("Six", 6);
        System.out.println("ConcurrentHashMap of even numbers: " + evenNumbers);

        //Creating ConcurrentHashMap of numbers
        ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
        numbers.put("One", 1);

        // Using putAll()
        numbers.putAll(evenNumbers);
        System.out.println("ConcurrentHashMap of numbers: " + numbers);
    }
}

출력

ConcurrentHashMap of even numbers: {Six=6, Four=4, Two=2}
ConcurrentHashMap of numbers: {Six=6, One=1, Four=-4, Two=2}
<시간>

ConcurrentHashMap 요소에 액세스

1. entrySet(), keySet() 및 values() 사용

예를 들어,

import java.util.concurrent.ConcurrentHashMap;

class Main {
    public static void main(String[] args) {
        ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();

        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("ConcurrentHashMap: " + numbers);

        // Using entrySet()
        System.out.println("Key/Value mappings: " + numbers.entrySet());

        // Using keySet()
        System.out.println("Keys: " + numbers.keySet());

        // Using values()
        System.out.println("Values: " + numbers.values());
    }
}

출력

ConcurrentHashMap: {One=1, Two=2, Three=3}
Key/Value mappings: [One=1, Two=2, Three=3]
Keys: [One, Two, Three]
Values: [1, 2, 3]

2. get() 및 getOrDefault() 사용

예를 들어,

import java.util.concurrent.ConcurrentHashMap;

class Main {
    public static void main(String[] args) {

        ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("ConcurrentHashMap: " + numbers);

        // Using get()
        int value1 = numbers.get("Three");
        System.out.println("Using get(): " + value1);

        // Using getOrDefault()
        int value2 = numbers.getOrDefault("Five", 5);
        System.out.println("Using getOrDefault(): " + value2);
    }
}

출력

ConcurrentHashMap: {One=1, Two=2, Three=3}
Using get(): 3
Using getOrDefault(): 5
<시간>

ConcurrentHashMap 요소 제거

예를 들어,

import java.util.concurrent.ConcurrentHashMap;

class Main {
    public static void main(String[] args) {

        ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("ConcurrentHashMap: " + numbers);

        // remove method with single parameter
        int value = numbers.remove("Two");
        System.out.println("Removed value: " + value);

        // remove method with two parameters
        boolean result = numbers.remove("Three", 3);
        System.out.println("Is the entry {Three=3} removed? " + result);

        System.out.println("Updated ConcurrentHashMap: " + numbers);
    }
}

출력

ConcurrentHashMap: {One=1, Two=2, Three=3}
Removed value: 2
Is the entry {Three=3} removed? True
Updated ConcurrentHashMap: {One=1}
<시간>

대량 ConcurrentHashMap 작업

ConcurrentHashMap 클래스는 동시 맵에 안전하게 적용할 수 있는 다양한 일괄 작업을 제공합니다.

1. forEach() 메서드

forEach() 메소드는 항목을 반복하고 지정된 기능을 실행합니다.

여기에는 두 개의 매개변수가 포함됩니다.

예를 들어,

import java.util.concurrent.ConcurrentHashMap;

class Main {
    public static void main(String[] args) {

        ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("ConcurrentHashMap: " + numbers);

        // forEach() without transformer function
        numbers.forEach(4, (k, v) -> System.out.println("key: " + k + " value: " + v));

        // forEach() with transformer function
        System.out.print("Values are ");
        numbers.forEach(4, (k, v) -> v, (v) -> System.out.print(v + ", "));
    }
}

출력

ConcurrentHashMap: {One = 1, Two = 2, Three = 3}
key: One value: 1
key: Two value: 2
key: Three value: 3
Values are 1, 2, 3,

위 프로그램에서는 병렬 임계값 4를 사용했습니다. . 즉, 맵에 4개의 항목이 포함된 경우 작업이 병렬로 실행됩니다.

forEach() 메소드의 변형

<시간>

2. search() 메소드

search() 메소드는 지정된 기능을 기반으로 지도를 검색하고 일치하는 항목을 반환합니다.

여기에서 지정된 함수는 검색할 항목을 결정합니다.

여기에는 선택적 매개변수 parallelThreshold도 포함됩니다. . 병렬 임계값은 맵의 요소 수 이후에 작업이 병렬로 실행되도록 지정합니다.

예를 들어,

import java.util.concurrent.ConcurrentHashMap;

class Main {
    public static void main(String[] args) {

        ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("ConcurrentHashMap: " + numbers);

        // Using search()
        String key = numbers.search(4, (k, v) -> {return v == 3 ? k: null;});
        System.out.println("Searched value: " + key);

    }
}

출력

ConcurrentHashMap: {One=1, Two=2, Three=3}
Searched value: Three

search() 메서드의 변형

<시간>

3. reduce() 메서드

reduce() 메소드는 맵의 각 항목을 누적(함께 수집)합니다. 지도의 모든 값을 추가하는 것과 같은 일반적인 작업을 수행하기 위해 모든 항목이 필요할 때 사용할 수 있습니다.

여기에는 두 개의 매개변수가 포함됩니다.

예를 들어,

import java.util.concurrent.ConcurrentHashMap;

class Main {
    public static void main(String[] args) {

        ConcurrentHashMap<String, Integer> numbers = new ConcurrentHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("ConcurrentHashMap: " + numbers);

        // Using search()
        int sum = numbers.reduce(4, (k, v) -> v, (v1, v2) -> v1 + v2);
        System.out.println("Sum of all values: " + sum);

    }
}

출력

ConcurrentHashMap: {One=1, Two=2, Three=3}
Sum of all values: 6

위의 프로그램에서 다음 문장을 주목하십시오.

numbers.reduce(4, (k, v) -> v, (v1, v2) -> v1+v2);

여기,

reduce() 메소드의 변형

<시간>

ConcurrentHashMap 대 HashMap

다음은 ConcurrentHashMap의 몇 가지 차이점입니다. 및 HashMap,

<시간>

ConcurrentHashMap이 필요한 이유


java

  1. 자바 연산자
  2. 자바 주석
  3. 자바 for-each 루프
  4. 자바 문자열
  5. 자바 인터페이스
  6. 자바 익명 클래스
  7. 자바 리소스 사용
  8. 자바 주석
  9. 자바 어설션
  10. 자바 알고리즘