동기화에 사용되는 네 가지 방법 소개
이 글은 동기화를 사용하는 네 가지 방법을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
1. 메소드 수정
synchronized 메소드 수정은 매우 간단합니다. 메소드 앞에 동기화를 추가하기만 하면 됩니다. 예:
public synchronized void method() { // todo }
인터페이스 메소드를 정의할 때 동기화 키워드를 사용할 수 없습니다.
생성자 메서드는 동기화된 키워드를 사용할 수 없지만 동기화를 위해 동기화된 코드 블록을 사용할 수 있습니다.
동기화된 키워드는 상속될 수 없습니다. 동기화하려면 키워드를 명시적으로 추가해야 합니다.
Synchronized 키워드로 수정된 메서드는 재정의된 경우 기본적으로 비동기화됩니다. 동기화하려면 명시적으로 키워드를 추가해야 합니다. 그렇지 않으면 상위 부모 클래스의 메서드가 동기화와 동일합니다.
2. 코드 블록을 수정하세요
public void method() { synchronized(this) synchronized(XX.class) }
synchronized(this)는 현재 개체가 여러 개인 경우 여기에는 동일한 개체만 잠글 수 있습니다.
synchronized(XX.class) 이 잠금은 이 유형의 클래스인 한 유용합니다.
두 개의 동시 스레드가 동일한 개체 개체의 동기화된(this) 동기화 코드 블록에 액세스할 때 한 번에 하나씩만 있을 수 있습니다. 스레드가 실행됩니다. 다른 스레드는 이 코드 블록을 실행하기 전에 현재 스레드가 이 코드 블록 실행을 완료할 때까지 기다려야 합니다. 스레드가 개체의 동기화된(this) 동기화 코드 블록에 액세스하면 다른 스레드는 여전히 개체의 동기화되지 않은(this) 동기화 코드 블록에 액세스할 수 있습니다. 특히 중요한 점은 스레드가 객체의 동기화된(this) 동기화 코드 블록에 액세스할 때 객체의 다른 모든 동기화된(this) 동기화 코드 블록에 대한 다른 스레드의 액세스가 차단된다는 것입니다.
세 번째 예는 다른 동기화된 코드 블록에도 적용됩니다. 즉, 스레드가 객체의 동기화된(this) 동기화 코드 블록에 액세스하면 이 객체의 객체 잠금을 획득합니다. 결과적으로 개체 개체의 모든 동기화된 코드 부분에 대한 다른 스레드의 액세스가 일시적으로 차단됩니다.
위 규칙은 다른 개체 잠금에도 적용됩니다.
3. 정적 메서드 수정
우리는 정적 메서드가 개체가 아닌 클래스에 속한다는 것을 알고 있습니다. 마찬가지로, 동기화로 수정된 정적 메서드는 이 클래스의 모든 개체를 잠그며, 모든 클래스를 사용할 때 이 유형의 클래스인 한 작동하는 개체는 모두 잠금 효과를 갖습니다. 개체 수에 관계없이 작동합니다. 다음 코드
public synchronized static void method() { // todo }
요약:A. 동기화된 키워드가 메서드에 추가되었는지 객체에 추가되었는지에 관계없이 해당 키워드가 작동하는 객체가 비정적이면 객체가 동기화된 경우 획득하는 잠금은 객체입니다. 작동하는 것이 정적 메서드이거나 클래스가 클래스인 경우 획득한 잠금은 클래스의 모든 개체에 대해 동일한 잠금입니다.
B. 각 개체에는 연결된 잠금이 하나만 있습니다. 이 잠금을 얻은 사람은 해당 개체가 제어하는 코드를 실행할 수 있습니다.
D. 동기화 키워드는 개체를 잠급니다
위 내용은 동기화에 사용되는 네 가지 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











1. 기본 기능 1. 낙관적 잠금으로 시작하여 잠금 충돌이 빈번하면 비관적 잠금으로 변환됩니다. 2. 경량 잠금 구현으로 시작하여 잠금이 오랫동안 유지되면 잠금이 해제됩니다. 3. 경량 잠금을 구현할 때 가장 많이 사용되는 스핀 잠금 전략 4. 불공정 잠금 5. 재진입 잠금 6. 읽기-쓰기 잠금이 아님 2. JVM 잠금 프로세스를 동기화합니다. 잠금은 잠금 없음, 편향된 잠금, 경량 잠금 및 중량 잠금 상태로 구분됩니다. 상황에 따라 순차적으로 업그레이드될 예정입니다. 편향된 자물쇠는 남자 주인공이 자물쇠이고 여자 주인공이 실이라고 가정합니다. 이 스레드만 이 자물쇠를 사용하면 남자 주인공과 여자 주인공은 결혼 증명서를 받지 못해도 영원히 행복하게 살 수 있습니다. -비용 운영) 그러나 여성 조연이 나타납니다.

1. Java의 잠금 개념 스핀 잠금: 스레드가 잠금을 획득할 때 다른 스레드가 잠금을 획득한 경우 스레드는 루프에서 대기한 후 다음까지 잠금을 성공적으로 획득할 수 있는지 계속 판단합니다. 잠금이 획득되면 루프가 종료됩니다. 낙관적 잠금: 충돌이 없다고 가정하고 데이터 수정 시 이전에 획득한 데이터와 일치하지 않는 데이터가 발견되면 최신 데이터를 읽고 수정을 다시 시도합니다. 비관적 잠금: 동시성 충돌이 발생할 것이라고 가정하고 데이터와 관련된 모든 작업을 동기화하며 데이터를 읽는 시점부터 잠금을 시작합니다. 배타적 잠금(쓰기): 리소스에 쓰기 잠금을 추가합니다. 스레드는 리소스를 수정할 수 있지만 다른 스레드는 리소스를 다시 잠글 수 없습니다(단일 쓰기). 공유 잠금(읽기): 리소스에 읽기 잠금을 추가한 후에는 읽을 수만 있고 수정할 수는 없습니다. 다른 스레드는 읽기 잠금만 추가할 수 있고 쓰기 잠금(다중)은 추가할 수 없습니다. S로 본다

Java 1에서 동기화를 사용하는 방법 요약입니다. 함수 수정자로 동기화를 사용하는 경우 샘플 코드는 다음과 같습니다. Publicsynchronizedvoidmethod(){//….} 이것이 동기화 방법입니다. 그러면 이때 어떤 개체가 동기화됩니까? 그가 잠그는 것은 이 동기화된 메소드 객체를 호출하는 것입니다. 즉, 객체 P1이 서로 다른 스레드에서 이 동기화 방법을 실행하면 이들 사이에 상호 배제가 형성되어 동기화 효과를 얻을 수 있습니다. 그러나 이 객체가 속한 Class에 의해 생성된 또 다른 객체 P2는 동기화 키워드를 추가하여 이 메소드를 임의로 호출할 수 있습니다. 위의 샘플 코드 등

1. 동기화는 가장 일반적으로 사용되는 동기화 방법이며 이를 사용하는 세 가지 주요 방법이 있음을 설명합니다. 2. 예시//일반 클래스 메서드 동기화synchronousdpublidvoidinvoke(){}//클래스 정적 메서드 동기화 동기화publicstaticvoidinvoke(){}//코드 블록 동기화 동기화(객체){}이 세 가지 메서드의 차이점은 동기화되는 개체가 다르다는 것입니다. 일반 클래스는 객체 자체를 동기화하고, 정적 메서드는 클래스 자체를 동기화하며, 코드 블록은 대괄호 안에 채워진 객체를 동기화합니다. Java에는 어떤 컬렉션이 있나요?

도구 준비 동기화의 원리에 대해 공식적으로 이야기하기 전에 스핀 잠금에 대해 먼저 이야기하겠습니다. 스핀 잠금은 동기화 최적화에 큰 역할을 하기 때문입니다. 스핀락을 이해하려면 먼저 원자성이 무엇인지 이해해야 합니다. 소위 원자성은 단순히 각 작업이 완료되지 않았거나 완료되었음을 의미합니다. 예를 들어, 변수 데이터에 하나를 추가하려면 다음 세 단계가 있습니다. 데이터 추가 로드 메모리에서 레지스터로. 데이터 값에 1을 더합니다. 결과를 다시 메모리에 씁니다. 원자성은 스레드가 증분 작업을 수행할 때 이 스레드가 이 세 가지 프로세스를 완료할 때만 다른 스레드에 의해 중단될 수 없음을 의미합니다.

요약: 동기화된 키워드는 하나의 스레드만 동기화된 코드 블록에 액세스할 수 있도록 Java에서 제공됩니다. syncised 키워드가 제공되는데 Java SDK 패키지에 Lock 인터페이스도 제공되는 이유는 무엇입니까? 이것이 불필요한 바퀴의 재발명인가요? 오늘 우리는 이 문제에 대해 함께 논의해 보겠습니다. 동기화된 키워드는 하나의 스레드만 동기화된 코드 블록에 액세스할 수 있도록 Java에서 제공됩니다. syncised 키워드가 제공되는데 Java SDK 패키지에 Lock 인터페이스도 제공되는 이유는 무엇입니까? 이것이 불필요한 바퀴의 재발명인가요? 오늘은 함께 토론해보자

동기화란 무엇입니까? Java 독자는 여러 미들웨어 소스 코드나 JDK 소스 코드에서 볼 수 있습니다. -스레딩 동기화는 스레드 안전성을 보장할 수 있습니다. 이를 뮤텍스 잠금(동시에 하나의 스레드만 실행할 수 있고 다른 스레드는 대기함)이라고 하며 비관적 잠금(동시에 하나의 스레드만 실행할 수 있으며 다른 스레드는 대기함)이라고도 합니다. 이를 구현하는 데 도움이 되도록 개발자는 동기화된 키워드만 사용하면 됩니다. 이를 사용할 때 객체를 잠금용 뮤텍스로 사용해야 합니다.

Java는 가시성 이상의 기능을 제공하기 위해 몇 가지 다른 수정자를 제공합니다. 이러한 수정자를 비액세스 수정자라고 합니다. static으로 선언된 정적 멤버는 클래스의 모든 인스턴스에 공통됩니다. 정적 멤버는 클래스 메모리에 저장되는 클래스 수준 멤버입니다. Final 이 수정자는 변수, 메서드 또는 클래스에 대한 추가 수정을 제한하는 데 사용됩니다. final로 선언된 변수의 값은 일단 값을 얻은 후에는 수정할 수 없습니다. Final 메서드는 하위 클래스에서 재정의될 수 없으며 Final 클래스의 하위 클래스를 만들 수도 없습니다. Abstract 이 수정자는 클래스 또는 메서드와 함께 사용할 수 있습니다. 변수와 생성자에는 이 수정자를 적용할 수 없습니다. abstract로 선언된 메서드는 서브클래스에서 수정되어야 합니다. abstract로 선언된 클래스를 인스턴스화할 수 없습니다. 동기 이 수정자는 여러 스레드를 제어하는 데 사용됩니다.
