Java:提高同步函数的线程速度

标签 java multithreading synchronized

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/

相关文章:

java - java中同步方法同时被访问会发生什么?

java - 使用 SuperCSV 更改 header 值

java - 如何通过 Selenium 将 Xcode 模拟器设置为以编程方式旋转到 iPhone/iPad 的横向

java - 如果 main 方法完成执行,任何长时间运行的线程会发生什么?

c++ - 如何提高C++中的多线程性能

java - 如何在多线程环境下实现FIFO队列

java - ORMLite JDBC 连接 MySQL 时出错

java - 哪个是 Spring 框架的最佳 Java IDE?

c++ - DLL CreateThread、DisableThreadLibraryCalls 和 _beginthreadex

java - 扩展 Thread 类时无法同步两个线程,但在实现 Runnable 接口(interface)时可以工作