【问题标题】:Execute multiple hibernate queries using threads in java在java中使用线程执行多个休眠查询
【发布时间】:2021-03-27 21:18:44
【问题描述】:

我有以下几行要执行,我想知道是否有办法使用线程一次执行它们。

repository_1.deleteAll();
repository_2.deleteAll();
repository_3.deleteAll();
repository_4.deleteAll();
repository_5.deleteAll();
repository_6.deleteAll();

【问题讨论】:

    标签: java multithreading hibernate


    【解决方案1】:
    new Thread(repository_1::deleteAll).start();
    new Thread(repository_2::deleteAll).start();
    new Thread(repository_3::deleteAll).start();
    new Thread(repository_4::deleteAll).start();
    new Thread(repository_5::deleteAll).start();
    new Thread(repository_6::deleteAll).start();
    

    或者如果您使用的是较旧的 java 版本:

    new Thread(new Runnable() { @Override public void run() { repository_1.deleteAll(); }}).start();
    new Thread(new Runnable() { @Override public void run() { repository_2.deleteAll(); }}).start();
    new Thread(new Runnable() { @Override public void run() { repository_3.deleteAll(); }}).start();
    new Thread(new Runnable() { @Override public void run() { repository_4.deleteAll(); }}).start();
    new Thread(new Runnable() { @Override public void run() { repository_5.deleteAll(); }}).start();
    new Thread(new Runnable() { @Override public void run() { repository_6.deleteAll(); }}).start();
    

    或者如果您想在继续执行代码之前等待所有这些都完成删除:

    Thread t1 = new Thread(repository_1::deleteAll);
    Thread t2 = new Thread(repository_2::deleteAll);
    Thread t3 = new Thread(repository_3::deleteAll);
    Thread t4 = new Thread(repository_4::deleteAll);
    Thread t5 = new Thread(repository_5::deleteAll);
    Thread t6 = new Thread(repository_6::deleteAll);
        
    t1.start();
    t2.start();
    t3.start();
    t4.start();
    t5.start();
    t6.start();
        
    try {
        t1.join();
        t2.join();
        t3.join();
        t4.join();
        t5.join();
        t6.join();
    } catch (Throwable tr) {
        tr.printStackTrace();
    }
    

    您也可以使用一种方法来完成所有这些操作,而无需一遍又一遍地重复相同的代码。

    【讨论】:

    • 我在第一个示例中所做的'new Thread(repository_1::deleteAll).start();'甚至比那更干净。这就是我提供多种解决方案的原因
    • 好吧。我更新了 1.8 的最后一个示例
    猜你喜欢
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多