for(int ii = 0; ii < 3; ii++)
executor.execute(new someClass);
VS
someFunction();
someFunction();
someFunction();
,其中
public static void someFunction(){
synchronized(lock){
for(int ii = 0; ii < long.MAX_VALUE; ii++);
}
}
private class someClass implements Runnable {
public void run() {
someFunction(); //someFunction() is a synchronized function
}
}
对不起,如果这可能是一个相当含糊的问题。我有一个同步的someFunction(),我想顺序调用3次,另一次有3个线程,其中每个运行someFunction()的任务。因为,它是同步的,只有1个线程可以访问,速度差异几乎相同,3个线程对1个线程。我也不允许修改或不同步someFunction()。我想知道是否有任何方法可以加快我使用线程的多线程方式?也许通过线程如何排队或什么?谢谢你的帮助。
答案 0 :(得分:6)
没有。无法同时多次运行同步方法(在同一对象上)。这就是synchronized关键字的重点。
同步可能会成为性能瓶颈,但减少这种情况的唯一方法是减少需要在这些关键部分完成的工作量。通常代码过于保守,也许并非一切都需要在同步块中。但这需要深入理解和重写代码,没有什么可以通过一些魔术设置进行调整(如果你删除太多的同步,你可能会破坏事情;很难获得多线程代码)。 / p>
答案 1 :(得分:0)
考虑一个最能描述您想要实现的实际情况。给我们举例说明您要实施的内容。这将有助于理解,从而为您提供有用和实用的解决方案。
这个问题很模糊,可以用很多方式解释。