同步数据库查询java

时间:2017-10-07 15:29:01

标签: java database multithreading callback synchronized

您好我有一个多程序查询HSQL数据库的java程序。我从查询得到一些非常奇怪的结果,我的猜测是数据库没有设置为同时处理许多查询。 (这在数据库中是否可行?)。

我想做的是排队任何数据库查询。

据我所知,这是在我的数据库对象中创建函数时使用synchronize关键字完成的吗?

我的数据库对象如下所示:

public class Database(){
    public Database(){
        connect();
    }

    private void connect(){
        //connect to HSQL database
    }

    public void executeOneTypeOfQuery(){
        ...
        ResultSet rs1 = someStatement.executeQuery();
        //do something with a query
    }

    public void executeAnotherTypeOfQuery(){
        ...
        ResultSet rs2 = anotherStatement.executeQuery();
        //do something with a query
    }

}

目前我可能会在不同的线程中同时调用executeOneTypeOfQuery()和executeAnotherTypeOfQuery()的任意组合。

这两个函数是否应该有synchronized关键字?或者这只会阻止他们同时调用JUST THAT方法两次?

我是否正确地认为另一种解决方案可能是利用回调(我真的不明白这里的语法)? 所以我的项目中的任何地方都调用其中一个数据库函数,我称之为中间同步函数,说明我真正想要使用哪个数据库函数。

所以线程调用类似的东西:

public synchronized void executeAnyQuery(Function theFunctionIWantToCall, Object[] args){
    //do theFunctionIWantToCall
}

这是正确的方法吗?如果是这样,回调的语法是什么?

1 个答案:

答案 0 :(得分:0)

synchronized关键字将函数锁定为另一个线程的访问,直到函数终止(虽然它不保证胎面将不间断地执行)

对于回调,你会做这样的事情

public class Foo {
    public static void main(String[] args) {
        new Foo.doExample();
    }

}