我有一个理解Java中synchronized(){}的问题。不知何故,我认为同步(this)我锁定了这个类的实例,如果我想访问一个属性或从另一个线程调用这个特定实例的函数,比这个其他线程必须等待,直到同步结束。在这个示例代码中,它不工作。 我希望线程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
}
}
,如果我做一个调用的方法它的工作原理,
public synchronized boolean getLoaded(){return loaded;}
但为什么写作和阅读过程必须同步?如果在写入原因时只锁定了对象,那么阅读是否必须等待呢?在第一个例子中,我所期望的编程做以下的东西:
线程A正在读取加载变量。
线程B想要写入加载的变量,但其同步,所以它锁定对象。
线程A试图读取加载可变的,但该对象被锁定,从而它等待。
线程B写入变量。
线程B解锁。
线程A继续阅读。
我读了很多关于这个主题,但我无法理解它像100%。希望有人能向我解释那个简单的项目。
一个简单的例子,我读3篇有关同步,但没有一个人提到,其只对同一个对象..容易解释,但最后我明白做什么同步!非常感谢:))现在请看看现在等待通知。也许这是要解决我的问题:) – ScriptWorld