如何最小化java程序的执行时间?
我用java创建了一个程序,将1000个随机数输入两个不同的数据库,一个用于奇数,另一个用于偶数。代码执行得很好,但执行几乎需要一分钟。如何最大限度地减少执行时间 代码如下:如何最小化java程序的执行时间?,java,execution-time,Java,Execution Time,我用java创建了一个程序,将1000个随机数输入两个不同的数据库,一个用于奇数,另一个用于偶数。代码执行得很好,但执行几乎需要一分钟。如何最大限度地减少执行时间 代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.text.DecimalFormat; import
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Random;
public class Test1 extends Thread {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
long start = System.currentTimeMillis();
int evencount = 0;
int oddcount = 0;
int breakcon = 0;
int breakcon1 = 0;
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1" + "?useSSL=false", "root",
"1234");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2" + "?useSSL=false", "root",
"1234");
try {
Class.forName("com.mysql.jdbc.Driver");
for (int n = 1; n <= 1000; n++) {
Random r = new Random();
int val = r.nextInt(100000);
if (val % 2 == 0) {
PreparedStatement ps = con.prepareStatement(" insert into try values (?)");
ps.setInt(1, val);
ps.executeUpdate();
ps.addBatch();
breakcon = breakcon + 1;
if (breakcon % 500 == 0 || breakcon == val)
ps.executeBatch();
evencount++;
} else {
try {
Class.forName("com.mysql.jdbc.Driver");
PreparedStatement ps3 = conn.prepareStatement(" insert into try1 values (?)");
ps3.setInt(1, val);
ps3.executeUpdate();
ps3.addBatch();
breakcon1 = breakcon1 + 1;
if (breakcon1 % 500 == 0 || breakcon1 == val)
ps3.executeBatch();
oddcount++;
}
catch (Exception e2) {
System.out.println(e2);
}
}
}
}
catch (Exception e) {
System.out.println(e);
}
long end = System.currentTimeMillis();
NumberFormat formatter = new DecimalFormat("#0.00000");
System.out.println("Execution time is " + formatter.format((end - start) / 1000d) + " seconds");
System.out.println(oddcount + evencount);
}
}
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.SQLException;
导入java.text.DecimalFormat;
导入java.text.NumberFormat;
导入java.util.Random;
公共类Test1扩展了线程{
公共静态void main(字符串[]args)抛出ClassNotFoundException、SQLException{
长启动=System.currentTimeMillis();
int evencount=0;
int oddcount=0;
int-breakcon=0;
int breakcon1=0;
Class.forName(“com.mysql.jdbc.Driver”);
Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/db1“+”?useSSL=false”、“根”,
"1234");
Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/db2“+”?useSSL=false”、“根”,
"1234");
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
for(int n=1;n而不是在每次setInt
之后调用ps.executeUpdate();
)-在for循环之后只执行一次。这就是使用addBatch
(聚合插入/更新并一次执行它们)的全部要点
正如Boris在下面的评论中所提到的,如果同时打开rewriteBatchedStatements
,执行速度会更快。看看如何实现它。我会看看SQL批处理。@JoeC我该怎么做?请解释这类问题最好问一下。因为它是关于改进运行代码的@Jens的te相当于完全删除Class.forName()
,这是过去的一次真正的爆炸。我想打开rewriteBatchedStatements
也会有帮助吗?@BoristheSpider很好,谢谢!