synchronized foo()
{
someMethod(new TimerTask()
{
public synchronized run()
{
//stuff
}
};
}
问题1:是在Timertask对象上同步的运行方法还是FOO中的类?
问题2:如果我摆脱了run()声明中的“同步”,而是在运行()主体中具有同步(this){}块,将“ this”介绍Timertask对象或是包含foo()的方法的实例?
方法在
run
本身上同步。同步
启用方法是在对象上同步的。 (类方法在
this
对象上同步。)如果您想同步在其成员的对象上
Class
,您可以使用
foo
我很确定这些答案,但是我无法挖掘出一个好的来源。第一个问题: 同步将锁定在Timertask上。
秒问题:
这是指蒂姆塔斯克;如果您想锁定包含的对象,请使用mycontainingObject.this只有一个线程可以访问秋千元素。多数民众赞成在AWT-Eventqueue-0。您需要意识到这一点。如果您的其他线程正在驱动或更换元素,则GUI崩溃的可能性很大。 使用此线程运行您的GUI:
尝试{ swingutilities.invokeandwait(new runnable(){ public void run(){ swing_prozor1 prozor = new Swing_prozor1(); } }); } catch(InterruptedException e){ // Namjerno Zanemareno } catch(InvocationTargetException e){ // Namjerno Zanemareno }
如果您有匿名类,这将为您提供所在类的实例,因此,如果您在匿名类中写下此。是该类的实例。要获得要写的课程的实例:
classname.this 您写的代码上面的代码告诉我这一点。您两次假装代码的一部分。 当您编写同步方法时,意味着只有一个线程可以一次访问此方法。其他线程在解锁同步方法时等待。
最终对象锁=新对象();
然后在它上同步。
this