您好我有一个多程序查询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
}
这是正确的方法吗?如果是这样,回调的语法是什么?
答案 0 :(得分:0)
synchronized关键字将函数锁定为另一个线程的访问,直到函数终止(虽然它不保证胎面将不间断地执行)
对于回调,你会做这样的事情
public class Foo {
public static void main(String[] args) {
new Foo.doExample();
}
}