java匿名类和同步和“ this”

问题描述 投票:0回答:2
synchronized foo() { someMethod(new TimerTask() { public synchronized run() { //stuff } }; }

问题1:是在Timertask对象上同步的运行方法还是FOO中的类?

问题2:如果我摆脱了run()声明中的“同步”,而是在运行()主体中具有同步(this){}块,将“ this”介绍Timertask对象或是包含foo()的方法的实例?

	

方法在

run

本身上同步。同步

启用方法是在
java synchronization class this anonymous
2个回答
14
投票

对象上同步的。 (类方法在

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


您写的代码上面的代码告诉我这一点。您两次假装代码的一部分。
当您编写同步方法时,意味着只有一个线程可以一次访问此方法。其他线程在解锁同步方法时等待。 



2
投票

最终对象锁=新对象();

然后在它上同步。

this


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.