我想在不同的线程上运行新的Connections和它的查询执行。我想通过初始化/连接到Connection来启动线程,然后等待查询并在同一个线程中运行它们。我的尝试是启动线程并初始化连接,然后暂停线程,只在我调用execute时才恢复。
private static synchronized boolean isActive()
{
return active;
}
private static synchronized void makeActive()
{
active = true;
}
public void run()
{
try
{
if(conn == null)
{
onConnect();
}
synchronized(this)
{
while(!isActive())
{
System.out.println(isActive());
wait();
}
System.out.println("exec");
onExecute();
}
}
catch(InterruptedException | SQLException e)
{
System.out.println("exception " + e.getMessage());
}
}
onConnect创建我的Connection
并调用onExecute
来执行查询。我在课外调用了一个查询:
public void execute(PreparedStatement statement, String query) throws SQLException
{
activeQuery = statement;
makeActive();
}
目前,当我启动线程时,如果我不使用join()
,我的onConnect()将被跳过,当我确实执行onConnect时,while(!isActive())
之后的块不执行所以我认为它总是在等待......
在此上下文中是否有更好的方法在JDBC中使用多个线程,或者此代码中是否存在任何明显错误?
答案 0 :(得分:1)
看起来像经典的等待/通知对:
public void execute(PreparedStatement statement, String query) throws SQLException
{
synchronized(this){
activeQuery = statement;
this.notify();
}
}
和内部运行方法:
while( some_finish_cond ) {
synchronized(this){
while(activeQuery==null){
this.wait();
}
System.out.println("exec");
onExecute();
activeQuery = null;
}
}