У меня есть одно требование обновить 300 000 записей, которые доступны в базе данных. Когда я написал автономную программу, потребовалось 25-30 минут, чтобы обновить 5 000 записей. поэтому для завершения всех записей это может занять 30 часов. Тогда я подумал, что напишу многопоточную программу. Я создал 2 потока, после чего начал обновляться, его заняло то же время, что и 30 минут для 5к записей.Где использовать концепцию многопоточности
Насколько я знаю, мы используем поток для параллельного доступа к методу, и в этом случае он не ускорит обновление.
Для приведенного выше сценария, что я должен сделать, чтобы уменьшить время. И что фактическое использование многопоточности
class MyThread1 extends Thread{
public static String getTaskID(String PID)
{
String taskID = OurGenerator.orgPID(PID);
return taskID;
}
Connection con;
PreparedStatement pstmt;
BufferedReader bf;
MyThread1(Connection con,PreparedStatement pstmt){
this.con=con;
this.pstmt=pstmt;
try {
bf=new BufferedReader(new FileReader("D:/prod_review_sifid3.txt"));
}catch (IOException e)
{
System.out.println("IO Error Occurred: " + e.toString());
}
}
public void run(){
String line;
try{
while ((line = bf.readLine()) != null)
{
String taskID = getTaskID(line);
pstmt.setString(1,taskID);
pstmt.setString(2,line);
pstmt.executeUpdate();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
class MyThread2 extends Thread{
public static String getTaskID(String PID)
{
String taskID = OurGenerator.orgPID(PID);
return taskID;
}
Connection con;
PreparedStatement pstmt;
BufferedReader bf;
MyThread2(Connection con,PreparedStatement pstmt){
this.con=con;
this.pstmt=pstmt;
try {
bf=new BufferedReader(new FileReader("D:/sifid_review2.txt"));
}catch (IOException e)
{
System.out.println("IO Error Occurred: " + e.toString());
}
}
public void run(){
String line;
try{
while ((line = bf.readLine()) != null)
{
String taskID = getTaskID(line);
pstmt.setString(1,taskID);
pstmt.setString(2,line);
pstmt.executeUpdate();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public class SifuuidInsert {
public static void main(String ar[])throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("","","");
PreparedStatement pstmt=con.prepareStatement("update Taskdata set taskID=? where entryid=?");
MyThread1 first=new MyThread1(con,pstmt);
first.start();
MyThread2 second=new MyThread2(con,pstmt);
second.start();
}
}
Это действительно зависит от того, что происходит в ваших методах 'run()'. –
Строка; \t \t попробовать { \t \t в то время как ((строка = bf.readLine())! = NULL) { \t \t \t \t \t Строка sifID = getSIFID (линия); // строки означает один идентификатор \t \t \t \t // Я прочитал этот идентификатор из текстового файла, где есть 3 lakhs id \t \t \t \t pstmt.setString (1, sifUUID); \t \t \t \t pstmt.setString (2, line); \t \t \t \t pstmt.executeUpdate(); \t \t \t \t \t } \t \t} улов (Исключение е) { \t \t \t e.printStackTrace(); \t \t} – kunu
Не могли бы вы добавить код на свой вопрос? Таким образом, мы можем, например, см. области применения. –