for(int ii = 0; ii < 3; ii++)
executor.execute(new someClass);
对比
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()。我想知道是否有任何方法可以从我使用线程的方式来加速多线程方式?也许通过线程如何排队之类的?感谢您的帮助。
最佳答案
没有。无法同时多次运行同步方法(在同一对象上)。这就是 synchronized 关键字的要点。
同步可能成为性能瓶颈,但减少它的唯一方法是减少那些关键部分需要完成的工作量。通常代码过于保守,也许并不是所有的东西都需要放在那个同步块(synchronized block)中。但这是需要深入理解和重写代码的东西,你不能通过一些神奇的设置来调整(如果你删除太多的同步,你可能会破坏东西;正确地获得多线程代码是困难的)。
关于Java:提高同步函数的线程速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394025/