java匿名类和同步以及“this”
我相信,在我的JavaGUI中,我正在处理一个竞争条件
我有一些方法可以在匿名类中创建“匿名方法”,如下所示:
synchronized foo()
{
someMethod(new TimerTask()
{
public synchronized run()
{
//stuff
}
};
}
问题:这个run方法是在TimerTask对象上同步的还是在foo所在的类上同步的
问题2:如果我在run()声明中去掉了“synchronized”,而在run()体内有一个synchronized(this){}块,“this”是指TimerTask对象还是指包含foo()的方法的实例对象
请帮帮我
谢谢, jbu
# 1 楼答案
run
方法在TimerTask
本身上同步。同步的instance methods are always synchronized on ^{Class
对象上同步。)如果要在} keyword. 假设
foo
是其成员的对象上进行同步,需要qualify the ^{foo()
是Bar
类的成员,在TimerTask
的run()
方法中,可以使用# 2 楼答案
如果要同步foo()和run(),那么可以创建一个显式锁对象,如
最终对象锁定=新对象()
然后在上面同步
# 3 楼答案
只有一个线程可以访问swing元素。这是AWT-EventQueue-0。你需要意识到这一点。如果其他线程正在删除或更改元素,gui很可能会崩溃。 要使用此线程运行gui:
如果你有anonymus类,这会给出你所在的类的实例,所以如果你在anonymus类中写这个。是那个类的实例。要获取要编写的类的实例,请执行以下操作:
你上面写的代码告诉我。你两次屏蔽了部分代码。 当您编写syncronized方法时,这意味着一次只能有一个线程访问此方法。其他线程在同步方法解锁时等待
# 4 楼答案
我很确定这些答案,但我找不到一个好的来源
第一个问题:
synchronized将锁定TimerTask
第二个问题:
这是指TimerTask;如果想锁定包含的对象,可以使用MyContainingObject。这个