나는 .NET
세계에서 왔으며 불행히도 Java 소스를 .NET
님의 눈으로보고 있습니다.Java 동기화 게임 : 동기화 && 대기 && 알림
다음 코드는 안드로이드 앱에서 (안 안드로이드 특정 전혀하지만)입니다 :
private class Worker implements Runnable {
private final Object mLock = new Object();
private Looper mLooper;
Worker(String name) {
Thread t = new Thread(null, this, name);
t.start();
synchronized (mLock) {
while (mLooper == null) {
try {
mLock.wait();
} catch (InterruptedException ex) {
}
}
}
}
public Looper getLooper() {
return mLooper;
}
public void run() {
synchronized (mLock) {
Looper.prepare();
mLooper = Looper.myLooper();
mLock.notifyAll();
}
Looper.loop();
}
public void quit() {
mLooper.quit();
}
}
내가 어떻게 synchronized
작품에 정확하게 명확하지 않다. 처음에는 synchronized가 mLock 객체를 잠그고 있다고 생각했지만, t.start()
생성자 스레드가 먼저 sync 블록에 들어가면 mLock.wait()
에서이를 차단하고 synchronized 블록을 입력하는 것을 차단하여 스레드 "t"를 암시 적으로 차단합니다. 내 휴대 전화 고리가
다음 생각은 동기화가 "코드 블록"(이 경우, 두 개의 동기화 된 블록은 두 개의 서로 다른 동기를 입력 할 수있는 독립적 인 => 스레드가 동기화입니다 :) 생각으로하기 때문에
이것은 분명히 잘못된 것입니다 제한없이 동시에 차단).
... 내 동료가 mLock.wait()
이 mLock을 잠그고 다른 스레드가 mLock에서 중요한 부분을 동시에 입력 할 수 있다고 말을들을 때까지.
내가 충분히 명확한 지 확실하지 않으므로 이에 대한 질문에 기꺼이 답변 해 드리겠습니다.
첫 번째 질문 : 귀하의 궁금한 점은 무엇입니까? – erickson
이 코드는 어떻게 작동합니까? :) – Jox