当前位置: 首页 > 知识库问答 >
问题:

在Java中同时进行函数调用

吕鸿文
2023-03-14

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

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

上述每个调用都涉及一个数据库调用。像怀斯一样,有6-7个电话。

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

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

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

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

提前感谢。

共有3个答案

松钟展
2023-03-14

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

    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();

是的,这个一般性的话题会很快引发各种各样的问题。多线程代码可能相当复杂,但在您的情况下,上面的代码可能很好。

李浩邈
2023-03-14

您可以使用executor框架:

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
}
姬旭
2023-03-14

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

创建一个Thread,并覆盖runnable。

在线程上调用start()时,每个线程都将被并行调用。

另一种方法是使用高级并发API,尤其是执行器。

但是,您必须确保并行程序中没有数据争用和/或死锁![如果任务之间存在某种依赖关系,那么这可能不是小事]。

 类似资料:
  • 我目前试图控制静态功能运行时,例如单击静音,然后静音调用。目前,当添加或删除通道时,一切都在运行,但我的for lope根本不做任何事情。 我只是想控制您将在下面看到的代码何时在服务器端被调用,如果有意义的话,不需要添加或删除通道。 我使用的是express、AriJS客户端、JQuery和AsteriskAri。 有人能解释一下我是如何做到这一点的吗? 只需运行该函数,即静音阵列中的所有通道。

  • 问题内容: 构造函数何时被调用? 创建对象之前。 在对象创建期间。 创建对象之后。 问题答案: 分配对象内存,初始化具有初始值的字段变量,然后调用构造函数,但是其代码在对象超类的构造函数代码之后执行。

  • 问题内容: 所以我有一个功能可以检查预订表中有多少取消: 要在SQL中执行他,我使用: 我的结果是: 我的问题是有人可以帮助我在JAVA中调用该函数吗,我尝试过但没有运气。 问题答案: Java提供了这样的目的。 将打印与在pl / sql中相同的内容。根据文档, 创建一个CallableStatement对象以调用数据库存储过程。CallableStatement对象提供了用于设置其IN和OUT

  • 我有以下代码 我试图对流进行基准测试,但在一次又一次地调用相同的函数时,执行时间稳步下降

  • 问题内容: 我目前正在尝试诺言,并且有一个非常基本的问题! 在一个Promise链中,调用同步函数是否是错误的做法?例如: 还是应该将我的同步功能重构为也返回承诺? 问题答案: 在一个Promise链中,调用同步函数是否是错误的做法? 不,这根本不是一个坏习惯。这是许多预期和有用的实践之一。 您可以完全自由地(在处理程序中)调用promise链中的同步函数或异步函数,然后再返回新的promise。

  • 问题内容: 这给出了错误 那么如何评估这样的查询呢? 问题答案: 我建议您查看有关提升的要求,因为当前的脚本没有太大意义。 另外,请查看elasticsearch 查询DSL的文档。它提供复合查询和简单查询,您可以将它们组合在一起。如错误所示,您不能在自定义分数查询中放入过滤器。您可以在自定义分数查询中使用过滤查询: 或使用像这样的顶级过滤器: 这两个选项的区别在于,如果您在搜索请求中也进行了构面