2

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

  1. 加载用户缓存 loadUserCache();
  2. 加载账户缓存 loadAccountCache();
  3. 加载客户缓存 loadCustomerCache();

上述每个调用都涉及一个数据库调用。同样明智的是,有 6-7 个电话。

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

这些都是一个接一个的顺序调用。

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

有人可以帮我进行这样的并行调用或任何其他替代方法吗?

提前致谢。

4

3 回答 3

7

您正在寻找多线程。查看并发的官方教程。

创建一个Thread, 并覆盖 runnable。

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

另一种方法是使用高级并发 API,尤其是Executors

但是,您必须确保并行程序中没有数据竞争和/或死锁![如果任务之间存在一些依赖关系,这可能不是微不足道的]。

于 2012-04-18T15:21:27.350 回答
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
}
于 2012-04-18T15:34:01.683 回答
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();

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

于 2012-04-18T15:27:40.633 回答