4

我正在尝试编写一个从数据库中读取信息并为表的每一行创建一个新线程的 java 程序。所以我不知道我需要多少线程。到目前为止,我有这个:

        con = DriverManager.getConnection(url, user, passwd);
        pst = con.prepareStatement("select hostname, ipadress, vncpassword from infoscreens");
        rs = pst.executeQuery();
        int i=0;
        while (rs.next()) {
            i++;
            Thread tread[i]  = new Savescreenshots(rs.getString(1),rs.getString(3),rs.getString(2));
            tread[i].start();
        }

但问题是这不起作用。我需要为表中的每一行创建一个新线程。剂量任何人都知道如何做到这一点

谢谢和问候

4

3 回答 3

4

您需要一个动态增长的容器来容纳一组未知大小 - a List,例如:

List<Thread> threads = new ArrayList<Thread>();
while (rs.next()) {
    Thread tread  = new Savescreenshots(rs.getString(1),rs.getString(3),rs.getString(2));
    tread.start();
    threads.add(thread);
}

此时Thread,您的程序创建和启动的所有对象都是threads列表的元素。您可以枚举它们并执行您计划对它们执行的任何其他操作(例如,等待它们完成):

for (Thread thread : threads) {
    thread.join();
}
于 2012-10-10T10:07:12.197 回答
2

您的想法听起来很疯狂,但您可以做的是使用 Java 中的 SQL 功能,找出您当前有多少行,然后使用该数字来创建您的线程。

于 2012-10-10T10:07:16.003 回答
1

尝试只使用简单的变量say t 而不是数组tread[i]。

此外,如果行数很大,为每一行创建一个新线程可能会填满内存。

于 2012-10-10T10:07:30.587 回答