스레드를 잠그는 방법은 무엇입니까? 동기화와 잠금의 차이점

 동기화와 잠금의 차이점: 동기화 코딩은 더 간단하고 잠금 메커니즘은 JVM에 의해 유지되며 경쟁이 치열하지 않을 때 성능이 더 좋습니다. Lock은 더욱 강력하고 유연하며 경쟁이 치열할 때 더 나은 성능을 발휘합니다.

  • 성능은 다릅니다. 리소스 경쟁이 치열할 때는 잠금 성능이 동기화보다 낫고, 경쟁이 치열하지 않으면 동기화는 잠금 경쟁 상황에 따라 편향 잠금 --> 경량 잠금 --> 중량 잠금에서 업그레이드됩니다. 프로그래밍이 더 간단합니다.
  • 잠금 메커니즘은 다릅니다. 동기화는 JVM 수준에서 구현되며 시스템은 잠금 해제 여부를 모니터링합니다. 잠금은 JDK 코드로 구현되며 수동으로 해제해야 하며 이는 finally 블록에서 구현됩니다. 잠금은 비차단 방식으로 획득할 수 있습니다.
  • 동기화된 프로그래밍은 더 간단하고 잠금에는 더 많은 기능이 있으며 더 유연하지만 단점은 최종적으로 리소스를 잠금 해제()해야 한다는 것입니다.
  • 사용법은 다릅니다. 동기화는 코드 블록이나 메서드에서 사용할 수 있습니다. lock은 코드에만 작성할 수 있으며 메서드를 직접 수정할 수는 없습니다.

잠금 지원 기능:

  • 공정한 잠금: 동기화는 불공정한 잠금입니다. 잠금은 공정한 잠금을 지원하며 기본적으로 불공정한 잠금을 사용합니다.
  • 인터럽트 가능한 잠금: ReentrantLock은 잠금 경쟁 작업을 중단할 수 있는 lockInterruptly() 함수를 제공합니다. 잠금을 잡을 때 중단되었는지 여부를 확인합니다. 중단은 직접 예외를 발생시키고 잠금 잡기를 종료합니다. 동기화는 잠금을 잡는 과정만 있을 뿐 개입할 수 없으며, 잠금을 잡기 전까지는 코딩을 통해 잠금 해제를 제어할 수 없습니다.
  • 빠른 피드백 잠금: ReentrantLock은 trylock() 및 trylock(tryTimes) 기능을 제공하며 잠금을 획득하기 위해 기다리지 않거나 제한된 시간 동안 대기하므로 보다 유연합니다. 교착상태를 피할 수 있습니다.
  • 읽기-쓰기 잠금: ReentrantReadWriteLock 클래스는 MySQL과 유사한 읽기-쓰기 잠금 기능을 구현합니다. 잠금 자체는 카운터를 유지합니다. 읽기 잠금은 동시에 획득할 수 있고 쓰기 잠금은 독점적으로 획득할 수 있습니다. 그리고 동기화된 것은 모두 배타적 잠금입니다.
  • 조건: ReentrantLock은 동기화보다 더 정확한 스레드 스케줄링 도구를 제공합니다. 조건, 잠금은 여러 조건을 가질 수 있습니다. 예를 들어, 생산 및 소비 사업에서는 생산 조건과 소비 조건을 제어하여 자물쇠를 정확하게 제어합니다.

Supongo que te gusta

Origin blog.csdn.net/ddwangbin520/article/details/131160257
Recomendado
Clasificación