【发布时间】:2014-01-29 18:56:35
【问题描述】:
public class Parser {
ExecutorService pool = Executors.newFixedThreadPool(10);
public void update() {
Item item = new Item(subj.getName(), dateBuilder.toString(),
cobBuilder.toString(), interest, count);
pool.submit(new ItemDispatcher(item));
}
}
public class ItemDispatcher implements Runnable {
private Item item;
public ItemDispatcher(Item someItem) {
this.item = someItem;
}
@Override
public void run() {
try {
new Database(item).writeToDb();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public class Database {
private String name;
private String date;
private String cob;
private String interest;
private String count;
private String _url;
private String _userId;
private String _password;
private String _dbLib;
private String _dbFile;
private Connection _conn;
private PreparedStatement _statement;
public Database(Item item) {
name = item.get_item();
date = item.get_date();
cob = item.get_cob();
interest = item.get_interest();
count = item.get_count();
}
public void writeToDb() {
try {
//statment.setString();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
我在包中有三个不同的类:Parser、ItemDispatcher 和 Database。我正在使用一个重复使用固定数量的线程(10)的线程池。我在Parser 类的回调update() 方法中收到更新。随着更新的到来,我创建了 Item 对象,这些对象作为可运行的任务提交以供执行。从ItemDispatcher 我将item 传递给Database 类。我意识到有一个问题。我需要 Database 类来连接到数据库,但是由于线程正在为每个项目调用 Database constructor,我不想每次都创建连接,而是使用一个被初始化且永远不会再创建的连接。不知道如何做到这一点,有人可以提供一些想法和建议吗?我不想让解析器类知道数据库类。我在哪里可以添加连接和preparedStatement 代码?
【问题讨论】:
标签: java multithreading concurrency prepared-statement