import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class vacuum {
public static void connect(String str) {
Connection conn = null;
Statement stmt = null;
try {
String url = "jdbc:sqlite:/data/" + str;
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
stmt.executeUpdate("VACUUM");
System.out.println(str + "ok.");
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
}
public static void main(String[] args) {
String str = "db1.lgd";
connect(str);
}
}
有几个 Sqlite 数据库需要清理。我想在几个平行流中对所有基地进行真空处理。那些。将数组中的碱基列表传递给 connect 方法,并在单独的线程中运行该方法本身。以上是为一个基地做真空的工作代码。提示,它要执行吗?
您需要创建一个对象
Thread
,将其传递给Runnable
并运行该方法start
,在 Java 8 中它看起来像这样根据并行流的概念,大多数情况下每次调用 connect() 方法的执行时间是不加总和的。每个线程的执行顺序是由 CPU 决定的,纯理论上的,当然,也有可能第二个线程正好在第一个线程结束之后才开始执行。实际上,这种情况不太可能发生,在您的情况下,执行时间通常约为 7 分钟。
除此之外,我建议你在这个例子中不要使用常规的 Statement ,而是使用PreparedStatement或CallableStatement,因为这两个 sql 查询具有相同的语法并且将被预编译,这将提高性能。
谢谢你。是这样的吗:
因此,如果您按顺序对每个碱基进行抽真空,抽真空时间需要相同的时间。那些。db1.lgd - 7 分钟,db2.lgd - 2 分钟。如果在多线程模式下,tezhe 9 分钟转出。