在我的应用程序中,我按以下方式加载缓存。
每个上述调用都涉及数据库调用。同样明智的是有6-7个电话。
当我的应用程序被加载时,我必须等待,直到加载缓存。
这些都是一个接一个的顺序呼叫。
如果我能找到一种平行进行这些调用的方法,那么应用程序加载期间的等待时间将大幅减少。
有人可以帮我做这样的并行电话或任何其他替代方法吗?
提前致谢。
答案 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();
是的,这个一般性主题可以快速打开各种问题。多线程代码可能非常复杂,但在您的情况下,上述情况可能会很好。