동시 프로그래밍 - 잠금 Lock 표시

4891 단어 다중 스레드
lock(잠금 표시)
Lock은 무조건적이고, 윤문할 수 있으며, 정시적이고, 중단할 수 있는 자물쇠 획득 조작을 제공하는 인터페이스로, 모든 잠금 해제 조작 방법이 표시되기 때문에 디스플레이 자물쇠라고 부른다.
Lock 인터페이스 및 핵심 방법
lock,unlock,trylock
Lock에 사용되는 표준 패러다임
package com.jym.concurrent.lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class LockDemo {

    private Lock lock = new ReentrantLock();
    private int count;

    public void increment () {
        lock.lock();
        try {
            count++;
        } finally {
            lock.unlock();
        }
    }

    public synchronized void increment2() {
        count++;
        increment2();
    }

    public synchronized void test() {
        increment2();
    }

}


Lock 커넥터와 synchronized 비교
  • synchronized 코드가 더 간결합니다.
  • Lock, 스텔스 잠금보다 높은 효율
  • Lock은 자물쇠를 가져오는 데 중단될 수 있습니다. 시간 초과로 자물쇠를 가져오고 자물쇠를 가져오려고 시도합니다.

  • Lock 인터페이스의 구현 클래스
  • ReentrantLock
  • ReentrantReadWriteLock 클래스 중 두 개의 정적 내부 클래스ReadLock과 WriteLock.

  • 읽기 및 쓰기 잠금:
    같은 시간에 여러 개의 읽기 스레드가 동시에 접근할 수 있지만, 쓰기 스레드가 접근할 때 모든 읽기와 쓰기가 막혀서, 읽기와 쓰기가 적은 경우에 가장 적합하다.
    많이 읽고 적게 쓰는 데 쓰인다.ReadLock 읽기 잠금(공유 잠금), WriteLock 쓰기 잠금(배타 잠금)
    스레드가 읽기 잠금에 들어가기 위한 사전 요구 사항:
  • 다른 라인의 자물쇠가 없습니다.
  • 요청을 쓰지 않았거나 썼지만 호출 루트와 자물쇠를 가진 루트는 동일합니다.

  • 스레드가 쓰기 잠금에 들어가기 위한 사전 요구 사항:
  • 추가 스레드가 없는 읽기 잠금
  • 추가 스레드가 없는 쓰기 잠금
  • 자물쇠 강등: 쓰기 자물쇠를 가져오고 읽기 자물쇠를 가져오고 쓰기 자물쇠를 놓는 순서에 따라 쓰기 자물쇠가 읽기 자물쇠로 강등될 수 있습니다.
    공평 자물쇠와 비공평 자물쇠
    공평 자물쇠: 라인이 기다리는 순서에 따라 자물쇠를 가져옵니다.비공평 자물쇠: 랜덤으로 자물쇠를 획득합니다.ReentrantLock은 기본적으로 불공정 잠금입니다.
    효율성: 불공평>공평
    다시 잠금:
    자물쇠에서 계속 자물쇠를 얻는다. 예를 들어 자물쇠를 잠그는 방법을 되돌려 사용했다.
    Condition 커넥터
    Lock 및 Condition을 사용하여 알림 대기 await: 자물쇠를 가져오는 루트를 막습니다.signal: 막힌 라인을 깨웁니다.

    좋은 웹페이지 즐겨찾기