Java 함수의 동기화된 블록은 동기화 잠금을 획득하여 스레드 안전성을 달성합니다. 스레드가 동기화된 블록에 들어가면 다른 스레드가 들어갈 수 없으므로 공유 데이터에 대한 액세스가 스레드로부터 안전합니다. 특정 단계: 동기화된 메서드 또는 코드 블록을 선언하고 동기화된 키워드를 사용합니다. 스레드가 동기화된 블록에 들어가면 동기화 잠금을 획득합니다. 다른 스레드는 첫 번째 스레드가 동기화 잠금을 해제할 때까지 동기화된 블록의 데이터에 액세스할 수 없습니다. 동기화된 블록에는 동기화해야 하는 코드만 포함됩니다.
Java 기능의 동기화된 블록에서 스레드 안전성을 달성하는 방법은 무엇입니까?
동기화 블록은 다중 스레드 환경에서 스레드로부터 안전하지 않은 기능을 스레드로부터 안전하게 만드는 데 사용되는 구문 설탕입니다. 이것은 본질적으로 뮤텍스 잠금입니다. 스레드가 동기화된 블록에 들어가면 동기화된 잠금을 획득하고 해당 스레드가 잠금을 해제할 때까지 다른 스레드는 동기화된 블록에 들어갈 수 없습니다.
Syntax
public synchronized void myFunc() { // 临界区代码 }
실용 사례
카운터 값을 1씩 증가시키는 스레드로부터 안전하지 않은 함수 increment()
가 있다고 가정합니다. 여러 스레드가 동시에 이 함수를 호출하는 경우 카운터 값이 올바르지 않을 수 있습니다. 이 문제를 해결하기 위해 동기화된 블록을 사용할 수 있습니다. increment()
,它将一个计数器值加 1。如果多个线程同时调用此函数,则计数器值可能会发生错误。我们可以使用同步块来解决这个问题:
private int counter; public synchronized void increment() { counter++; }
这样,当一个线程调用 increment()
函数时,它会获取对 counter
的独占锁。其他线程在第一个线程释放该锁之前都无法访问 counter
,从而确保对 counter
的访问是线程安全的。
需要注意的是:
synchronized
rrreeeincrement()
함수를 호출하면 counter
에 대한 배타적 잠금을 획득합니다. 첫 번째 스레드가 잠금을 해제할 때까지 다른 스레드는 counter
에 액세스할 수 없으므로 counter
에 대한 액세스가 스레드로부터 안전하도록 보장됩니다. synchronized
키워드만 사용할 수 있습니다. 위 내용은 Java 기능의 동기화된 블록에서 스레드 안전성을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!