Java에서 synchronized() {}을 (를) 이해하는 데 문제가 있습니다. 어떻게 든 나는이 클래스의 인스턴스를 잠그고 다른 스레드로부터이 특정 인스턴스의 함수를 호출하거나 속성에 액세스하려는 경우 synchronized (over)가 동기화 될 때까지 기다려야한다고 생각했습니다. 어쨌든이 샘플 코드에서는 DOESNT가 작동합니다. 스레드 A가 스레드 B가 뭔가를 수행하고 나중에 수행 할 때까지 기다려야합니다.변수를 동기화/잠금하는 방법은 무엇입니까?
public class A implements Runnable{
public void start(){
Thread t = new Thread(this);
t.start();
}
public void run(){
B b = new B();
b.start();
//DO STUFF
while(b.loaded){
//WAIT FOR B DOING STUFF
}
//GO ON DOING STUFF
}
}
public class B implements Runnable {
public boolean loaded;
public B(){
loaded = false;
}
public void start(){
Thread thread = new Thread(this);
thread.start();
}
public void run(){
//DOING STUFF
synchronized (this){
loaded = true;
}
//DO OTHER STUFF
}
}
I라는 방법을 할 경우 작동 ,
public synchronized boolean getLoaded(){return loaded;}
왜 쓰기 및 읽기 프로세스를 동기화해야합니까? 쓰는 동안 객체가 잠긴 경우라면 충분하지 않아야합니다. 그러면 읽기가 어쨌든 기다려야합니까? 첫 번째 예제에서 나는 다음과 같은 일을하는 프로그래밍을 기대합니다 :
스레드 A는로드 된 변수를 읽습니다.
스레드 B는로드 된 변수를 쓰기를 원하지만 객체를 잠급니다.
스레드 A는로드 된 변수를 읽으려고 시도하지만 객체가 잠겨 기다립니다.
스레드 B가 변수를 씁니다.
스레드 B가 잠금 해제됩니다.
스레드 A는 계속 읽습니다.
이 주제에 대해 많이 읽었지만 100 %처럼 이해할 수는 없습니다. 누군가가 그 간단한 프로젝트를 설명해 주길 바래.
나는 동기화에 관한 3 개의 기사를 읽었지만 아무도 같은 대상에 대해서만 언급했다. 쉬운 설명이지만 마침내 나는 동기화가 무엇인지 이해했다! 대단히 감사합니다 :)) 아프고 기다려보고 지금 알려주십시오. 아마 이것은 내 문제를 해결할 것입니다 :) – ScriptWorld