这是两个类:
public class Cls implements Runnable, KeyListener
Thread t;
Object obj;
public Cls(Thing obj) {
this.obj = obj;
...
void keyPressed(KeyEvent e) {
...
}
void run() {
...
void start() {
if (t != null)
t = new Thread(this, "we");
t.start();
和
public class Main extends JPanel {
public static void main (String[] args)
{
Thing obj = new Thing(stuff);
Cls cl = new Cls(obj);
addKeyListener(cls);
...
}
(暂时如何添加KeyListener
可能会有一些不准确之处,但我的观点是它会被添加到Main类中的Cls
实例中
现在,如果发生KeyEvent
,keyPressed
方法会在main()
的主题或Cls
'中运行吗?提问,因为Cls
线程的run()
方法会运行一个无限循环,所以如果keyPressed
运行它将永远无法执行Cls
'线。
另外,正如您可以看到Thing
个实例,obj
已在Main中实例化并传递到Cls
'构造函数原样。知道Cls
不断修改obj
而Main使用它(不以任何方式修改它),是否用sychronized
包装负责的代码块足以强制执行顺序访问?请随时提供您可能想要分享的任何见解。