찾다
Javajava지도 시간Java의 정적 동기화

스레드 실행은 인스턴스의 메소드가 동기화되면 인스턴스당 하나의 스레드 실행이 되지만, 동일한 클래스의 인스턴스가 두 개 이상 있을 경우에만 제공하기 위해 클래스 수준에서 동기화가 필요한 문제가 됩니다. 객체 수준에서 동기화하는 것보다 클래스의 모든 인스턴스에 대해 하나의 잠금을 설정합니다. 이를 Java에서는 정적 동기화라고 하며 두 가지 방법으로 수행할 수 있습니다. 하나는 정적 동기화 메서드를 사용하고 다른 하나는 동기화된 블록을 사용하는 것입니다. 정적 메소드 내의 코드.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

구문

구문은 다음과 같습니다.

synchronized static return_type class_name{}

여기서 반환 유형은 클래스에서 반환된 값의 유형이고 class_name은 클래스의 이름입니다.

Java에서 정적 동기화는 어떻게 작동하나요?

클래스의 각 인스턴스에는 Java의 클래스 객체에 대한 잠금이 있습니다. 정적 메서드가 동기화되면 잠금은 클래스 개체에 있지 않고 클래스 자체에 적용됩니다. obj1과 obj2라는 클래스의 두 개체가 있고 스레드 t1과 t2가 개체 obj1에서 작동하고 있다고 가정해 보겠습니다. 마찬가지로 스레드 t3 및 t4는 객체 obj2에서 작동 중입니다. 코드 블록이나 메서드가 동기화되면 스레드 t1과 t2 모두 단일 잠금이 있는 동일한 개체 obj1을 참조하므로 스레드 t1과 t2 사이에 간섭이 있을 수 없습니다. 마찬가지로 스레드 t3과 t4 모두 단일 잠금이 있는 동일한 객체 obj2를 참조하기 때문에 스레드 t3과 t4 사이에는 간섭이 있을 수 없습니다.

그러나 스레드 t1과 t3 모두 서로 다른 잠금을 사용하여 서로 다른 객체를 얻었으므로 스레드 t1과 t3 사이에 간섭이 있을 수 있습니다. 마찬가지로, 스레드 t2와 t4 모두 서로 다른 잠금을 사용하여 서로 다른 객체를 획득했기 때문에 스레드 t2와 t4 사이에 간섭이 있을 수 있습니다. 우리는 스레드 간에 어떤 종류의 간섭도 원하지 않으며 이 문제는 Java의 정적 동기화를 사용하여 해결할 수 있습니다. 클래스 객체는 클래스 로드가 처음으로 발생할 때 Java Virtual Machine에 의해 생성됩니다. 클래스를 처음 로드한 후에는 동일한 클래스가 다시 로드되지 않습니다. Java Virtual Machine에 의해 로드되는 모든 클래스에 대해 클래스의 인스턴스가 생성됩니다. 이러한 클래스 인스턴스를 객체라고 하며 객체 동기화는 Java의 정적 동기화를 사용하여 수행할 수 있습니다.

Java에서 정적 동기화를 구현하는 예

아래는 예시입니다.

예시 #1

Java의 정적 동기화를 시연하는 프로그램:

코드:

//a class called check is defined
class check
{
// a method called Line is define and only one thread will be able to access this method at once because it is synchronized
synchronized public void Line()
{
//a for loop is defined to loop from values 0 to 3
for (int r = 1; r 
<p><strong>출력:</strong></p>
<p><img  src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172500474663661.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Java의 정적 동기화" ></p>


<p><strong>설명:</strong> 위 프로그램에는 check라는 클래스가 정의되어 있습니다. 그런 다음 Line이라는 메서드가 정의되고 동기화되므로 한 번에 하나의 스레드만 이 메서드에 액세스할 수 있습니다. 그런 다음 값 0에서 3까지 반복하도록 for 루프가 정의됩니다. 그런 다음 클래스의 스레드를 확장하는 Trap이라는 클래스가 방어됩니다. 그런 다음 클래스 검사의 변수가 정의됩니다. 클래스 트랩의 생성자는 검사 클래스 변수를 매개변수로 사용하여 정의됩니다. 그런 다음 표준 실행 방법이 재정의됩니다. 그런 다음 프로그램이라는 클래스가 정의됩니다. 그런 다음 기본 메서드가 호출됩니다. 그런 다음 클래스 검사 인스턴스가 정의됩니다. 그런 다음 클래스 트랩의 두 스레드인 tra1 및 tra2가 생성되고 동일한 개체를 공유합니다. 그런 다음 두 스레드 tra1 및 tra2의 실행은 한 스레드의 실행이 다른 스레드의 실행을 방해하지 않거나 한 스레드의 실행이 다른 스레드의 실행을 잠그지 않는 방식으로 시작됩니다. 프로그램의 출력은 위의 스냅샷과 같습니다.</p>
<h3 id="Java-정적-동기화의-장점">Java 정적 동기화의 장점</h3>
<p>여러 가지 장점이 있습니다. 그들은:</p>
  • 데이터 불일치 문제는 Java의 정적 동기화를 사용하여 해결할 수 있습니다.
  • Java의 정적 동기화를 사용하면 특정 시점에 하나의 스레드에서만 개체에 액세스할 수 있습니다. 하나의 스레드에서만 접근하려는 객체는 반드시 동기화 키워드로 선언해야 합니다.
  • Java의 정적 동기화를 사용하여 다양한 스레드와 프로세스의 동시성을 관리할 수 있습니다. 즉, 두 개 이상의 스레드 또는 두 개 이상의 프로세스를 동시에 실행하여 하나의 스레드가 다른 스레드의 실행을 잠그거나 방해하지 않도록 할 수 있습니다.

결론

이 튜토리얼에서는 정의를 통해 Java의 정적 동기화 개념, Java에서 정적 동기화를 선언하는 구문, 예제를 통해 Java에서 정적 동기화 작업 및 해당 출력과 Java에서 정적 동기화의 장점을 이해합니다.

위 내용은 Java의 정적 동기화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까?고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까?Mar 17, 2025 pm 05:46 PM

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까?적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까?Mar 17, 2025 pm 05:45 PM

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까?카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까?Mar 17, 2025 pm 05:44 PM

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까?캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까?Mar 17, 2025 pm 05:43 PM

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까?Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까?Mar 17, 2025 pm 05:35 PM

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음