1
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()。我想知道是否有任何方法可以从我使用线程的方式加速多线程方式?也许通过线程如何排队或其他什么?谢谢你的帮助。

4

2 回答 2

6

不可以。没有办法在同一时间多次运行同步方法(在同一个对象上)。这就是 synchronized 关键字的意义所在。

同步可能成为性能瓶颈,但减少这种瓶颈的唯一方法是减少需要在这些关键部分完成的工作量。通常代码过于保守,也许并不是所有的东西都需要在那个同步块中。但这需要对代码有深入的理解和重写,没有什么可以通过一些神奇的设置来调整(如果你删除了太多的同步,你可能会破坏事情;获得正确的多线程代码是很困难的)。

于 2012-11-15T08:53:41.373 回答
0

想一个最能描述您想要实现的实际情况。给我们一个你正在尝试实施的例子。这将有助于理解,从而为您提供有用和实用的解决方案。

这个问题很模糊,可以有多种解释。

于 2012-11-15T10:00:24.453 回答