gpt4 book ai didi

java - 观察者的更新方法是否会在事件派发线程上执行

转载 作者:行者123 更新时间:2023-11-30 09:18:03 28 4
gpt4 key购买 nike

如果我有一个实现Observer接口(interface)的JFrameupdate()方法会在事件调度线程上执行吗?

public class MyFrame extends JFrame implements Observer{
@Override
public void update(Observable o, Object arg) {
//do gui stuff
}
}

.

public class MyTask extends Observable implements Runnable{
@Override
public void run() {
setChanged();
notifyObservers("Update!");
}
}

最佳答案

正如我自己发现的:

不会,它会在调用notifyObservers()方法的Thread上执行。

从源码可以看出,notifyObservers()方法,只是调用了观察者的update()方法,并没有将任务传递给另一个线程。

public void notifyObservers(Object arg) {
/*
* a temporary array buffer, used as a snapshot of the state of
* current Observers.
*/
Object[] arrLocal;

synchronized (this) {
if (!changed)
return;
arrLocal = obs.toArray();
clearChanged();
}

for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);
}
}

关于java - 观察者的更新方法是否会在事件派发线程上执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18700384/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com