동기 화 된 노트
동기 화 된 노트
1. synchronized 인 스 턴 스 방법
synchronized void method(){
...
}
기능 적 으로 그것 은
void method() {
synchronized (this) {
...
}
}
2. synchronized 클래스 방법
class Something {
static synchronized void method(){
...
}
}
기능 적 으로 그것 은
class Something {
static void method() {
synchronized (Something.class){
...
}
}
}
3. 우리 도 synchronized 와 유사 한 기능 을 실현 할 수 있 는 방법 을 사용자 정의 할 수 있다 면 코드 는 다음 과 같 습 니 다.
void method() {
lock();
try{
...
}finally{
unlock();
}
}
이상 의 코드 는 Before / After Pattern 의 실현 방식 입 니 다.
예:
아래 에서 Mutex 류 는 공유 와 배척 을 하 는 메커니즘 으로 일반적으로 mutex 라 고 부른다.
public class Gate {
private int counter = 0;
private String name = "Nobody";
private String address = "Nowhere";
private final Mutex mutex = new Mutex();
public void pass(String name, String address) { // synchronized
mutex.lock();
try {
this.counter++;
this.name = name;
this.address = address;
check();
} finally {
mutex.unlock();
}
}
public String toString() { // synchronized
String s = null;
mutex.lock();
try {
s = "No." + counter + ": " + name + ", " + address;
} finally {
mutex.unlock();
}
return s;
}
private void check() {
if (name.charAt(0) != address.charAt(0)) {
System.out.println("***** BROKEN ***** " + toString());
}
}
}
디자인 이 간단 한 Mutex 클래스 1:
public final class Mutex {
private boolean busy = false;
public synchronized void lock() {
while (busy) {
try {
wait();
} catch (InterruptedException e) {
}
}
busy = true;
}
public synchronized void unlock() {
busy = false;
notifyAll();
}
}
완벽 한 디자인 의 Mutex 클래스 2:
public final class Mutex {
private long locks = 0;
private Thread owner = null;
public synchronized void lock() {
Thread me = Thread.currentThread();
while (locks > 0 && owner != me) {
try {
wait();
} catch (InterruptedException e) {
}
}
// locks == 0 || owner == me
owner = me;
locks++;
}
public synchronized void unlock() {
Thread me = Thread.currentThread();
if (locks == 0 || owner != me) {
return;
}
// locks > 0 && owner == me
locks--;
if (locks == 0) {
owner = null;
notifyAll();
}
}
}
4. 우 리 는 synchronized 블록 을 볼 때 'synchronized 는 무엇 을 보호 하 는 것 입 니까?' 라 고 생각 한 다음 에 '누구의 잠 금 을 가 져 와 서 보호 하 는 것 입 니까?' 라 고 생각해 야 합 니 다.
synchronized 인 스 턴 스 방법의 순종 을 호출 하려 면 thid 의 잠 금 을 가 져 옵 니 다.하나의 인 스 턴 스 잠 금 은 같은 시간 에 하나의 스 레 드 만 얻 을 수 있 습 니 다.
인 스 턴 스 가 다 르 면 잠 금 도 달라 집 니 다.synchronized 블록 을 사용 할 때 특히 '누구의 잠 금 을 가 져 와 서 보호 하 는 지' 를 고려 해 야 합 니 다.... 때문에
synchronized 는 가 져 올 대상 의 잠 금 을 명확 하 게 밝 혀 야 합 니 다.예 를 들 면:
synchronized (obj) {
...
}
이러한 프로그램 코드 에서 obj 는 우리 가 잠 겨 있 는 대상 을 가 져 오 는 것 입 니 다.이 대상 이 잘못 쓰 지 않도록 조심 하 세 요. 잘못된 대상 의 잠 금 을 가 져 오 면 자신 을 보호 하고 싶 습 니 다.
자기 집 은 남 의 집 문 을 잠 갔다.
주: 코드 는 자바 다 중 스 레 드 디자인 모델 제1장 SingleThreaded Execution 에서 나 온 내용 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.