所以我在java中创建一个服务器应用程序,我希望数据库请求是事件驱动的,因此它是非阻塞的。
我这样做的方法是在另一个线程中创建MySQL连接,到目前为止我已经有了这个:
package makeza.server.persistence;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Logger;
import makeza.server.WorldServer;
public final class MySQLNonblock extends Thread {
public Connection connection = null;
private Logger log = WorldServer.log;
private String host, port, user, pass, database;
@Override
public void run(){
init();
}
public MySQLNonblock(String hst, String prt, String usr, String pas, String dbase){
this.setDaemon(true);
this.setName("DatabaseThread");
this.host = hst;
this.port = prt;
this.user = usr;
this.pass = pas;
this.database = dbase;
}
public void init(){
log.info("Connecting to database...");
try {
connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" +
database + "?" + "user=" + user + "&password=" + pass);
log.info("Connected to database");
} catch (SQLException e) {
log.severe("Couldn't connect to database at " + host + ":" + port);
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
System.exit(1);
//e.printStackTrace();
}
}
}
我在另一个类中启动线程,然后连接到mysql服务器,然后线程退出。
如何让线程持久化然后运行方法结束以便我可以使用mysql连接?
答案 0 :(得分:2)
您想使用connection pooling。
在这方面“关闭”连接意味着“将连接返回池以供重用”。
答案 1 :(得分:0)
你需要等到其他线程通过通知它才能唤醒它。 阅读有关并发性的教程:http://download.oracle.com/javase/tutorial/essential/concurrency/
您可能应该使用更高级别的抽象,例如ExecutorService
。