printA
内class A
和printB
class B
内有两种方法printA
。 static
是printB
方法,synchronized
是非静态方法。这两种方法都是printA
。每个printB
和static
都有1亿个线程。
执行哪种方法需要的时间更少?
我对{{1}}方法的理解围绕对象创建相关的东西。你知道,如果不需要类obj来调用静态方法。或者util方法可以是静态方法。或者静态方法是全局的,难以进行单元测试。
在这种情况下,我猜静态方法的执行会更快,因为它将被创建一次,然后被其他每个线程重用。
答案 0 :(得分:7)
如果你有很多对象和多个处理器核心,你可能会发现printB更快。 printA在类对象上同步,因此对它的所有调用都是一次一个地完成。 printB在其对象上同步,因此多个printB调用可以并行运行。
您真的需要在程序的上下文中根据程序运行的典型硬件配置对您的方法进行基准测试。
答案 1 :(得分:0)
尽管理论上静态方法应该更快,因为非静态方法是late bound,实际上静态和非静态成员之间通常没有性能差异
编辑:@Patricia Shanahan虽然提出了一个很好的观点
答案 2 :(得分:0)
如果在printB
的不同对象上调用Class B
,则可以并行运行,因为printB
对其对象或{{1}保持锁定}}
虽然this
将锁定printA
对象,但如果多个线程调用.class
将被序列化,即使调用不同的对象也是如此。
所以结论,printB
似乎更快。
注意:实际输出也取决于您的班级中有多少同步方法。
所以我想说很难对此发表评论,实际的基准测试可能会提供准确的结果。