用Java进行同步函数调用

时间:2012-04-18 15:19:38

标签: java

在我的应用程序中,我按以下方式加载缓存。

  1. 加载用户缓存loadUserCache();
  2. 加载帐户缓存loadAccountCache();
  3. 加载客户缓存loadCustomerCache();
  4. 每个上述调用都涉及数据库调用。同样明智的是有6-7个电话。

    当我的应用程序被加载时,我必须等待,直到加载缓存。

    这些都是一个接一个的顺序呼叫。

    如果我能找到一种平行进行这些调用的方法,那么应用程序加载期间的等待时间将大幅减少。

    有人可以帮我做这样的并行电话或任何其他替代方法吗?

    提前致谢。

3 个答案:

答案 0 :(得分:7)

您正在寻找多线程。看看官方tutorial for concurrency

创建Thread,并覆盖runnable。

当您在线程上调用start()时,每个线程将相互并行调用。

另一种方法是使用high-level concurrency API,尤其是Executors

您必须确保并行程序中没有data races和/或dead-locks! [如果任务之间存在某种依赖关系,这可能不是微不足道的。)

答案 1 :(得分:3)

您可以使用执行程序框架:

public static void main(String args[]) throws InterruptedException {
    ExecutorService executor = Executors.newFixedThreadPool(3);
    Runnable user = new Runnable() {
        @Override
        public void run() {
            loadUserChache();
        }
    };
    Runnable account = new Runnable() {
        @Override
        public void run() {
            loadAccountCache();
        }
    };
    Runnable customer = new Runnable() {
        @Override
        public void run() {
            loadCustomerCache();
        }
    };

    executor.submit(user);
    executor.submit(account);
    executor.submit(customer);

    executor.shutdown();
    executor.awaitTermination(10, TimeUnit.SECONDS); //handle timeout here
}

答案 2 :(得分:1)

为要并行运行的每个代码块启动一个新的线程。

    new Thread(new Runnable(){
       loadUserCache();
    }).start();

    new Thread(new Runnable(){
       loadAccountCache();
    }).start();

    new Thread(new Runnable(){
       loadCustomerCache();
    }).start();

或者

    new Thread(new Runnable(){
       loadUserCache();
       loadAccountCache();
       loadCustomerCache();
    }).start();

是的,这个一般性主题可以快速打开各种问题。多线程代码可能非常复杂,但在您的情况下,上述情况可能会很好。