gpt4 book ai didi

java - 如何使用同步线程将数据插入到我的数据库表中

转载 作者:行者123 更新时间:2023-11-30 05:36:51 25 4
gpt4 key购买 nike

我对使用同步线程从mysql表中获取数据有疑问,我尝试使用join(方法),但我想使用synchronized关键字并且需要得到相同的结果。请通过修改我的代码向我提供正确的代码。我是异步执行的。

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class SyncThread extends Thread{
String a1="", b1="";
public SyncThread(String a,String b)
{
a1=a;
b1=b;
}
public void run(){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/EmployeeDetails","root","root");
PreparedStatement stmt=con.prepareStatement("insert into EmployeeDetail values(?,?,?)");
stmt.setString(1,a1);
stmt.setString(2,b1);
stmt.setString(3,Thread.currentThread().getName());
stmt.execute();
con.close();

}
catch(Exception e){ System.out.println(e);}
}
public static void main(String args[]){
List<String> fname=new ArrayList<String>();
fname.add("Vinoth");
fname.add("Sesha");
fname.add("Sachin");
fname.add("Dinesh");
fname.add("Karan");
List<String> lname=new ArrayList<String>();
lname.add("Kumar");
lname.add("Janarthan");
lname.add("Sabarish");
lname.add("Kumar");
lname.add("Kumar");
SyncThread obj;
for(int i=0;i<5;i++)
{
obj=new SyncThread(fname.get(i),lname.get(i));
obj.start();
// try{
// obj.join();
// }catch(Exception e){System.out.println(e);}
}
}
}

我期望的输出fname lname 线程 0fname lname 线程 1fname lname 线程 2fname lname 线程 3fname lname Thread-4

最佳答案

您可以在想要互斥的 block 上使用同步。同步确保只有一个线程会进入该 block 。它不能保证订单。要保持顺序,可以使用 join() 方法。这是您修改后的代码,我只是打印值而不是插入数据库

package helper;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;

public class Test extends Thread {
String a1 = "", b1 = "";

public Test(String a, String b) {
a1 = a;
b1 = b;
}

Integer resource = new Integer(1);
public void run() {
try {
/*
* Class.forName("com.mysql.jdbc.Driver");
* Connection con = DriverManager.getConnection(
* "jdbc:mysql://localhost:3306/EmployeeDetails", "root", "root");
* PreparedStatement stmt = con.prepareStatement("insert into EmployeeDetail values(?,?,?)");
* stmt.setString(1, a1);
* stmt.setString(2, b1);
* stmt.setString(3,Thread.currentThread().getName()); stmt.execute(); con.close();
*/
synchronized (resource) {
System.out.println(a1+" # "+b1 +" # "+Thread.currentThread().getName());
}


} catch (Exception e) {
System.out.println(e);
}
}

public static void main(String args[]) throws InterruptedException {
List<String> fname = new ArrayList<String>();
fname.add("Vinoth");
fname.add("Sesha");
fname.add("Sachin");
fname.add("Dinesh");
fname.add("Karan");
List<String> lname = new ArrayList<String>();
lname.add("Kumar");
lname.add("Janarthan");
lname.add("Sabarish");
lname.add("Kumar");
lname.add("Kumar");
Test obj;
for (int i = 0; i < 5; i++) {
obj = new Test(fname.get(i), lname.get(i));
obj.start();
obj.join();
// try{
// obj.join();
// }catch(Exception e){System.out.println(e);}
}
}
}

输出:

Vinoth # Kumar # Thread-0
Sesha # Janarthan # Thread-1
Sachin # Sabarish # Thread-2
Dinesh # Kumar # Thread-3
Karan # Kumar # Thread-4

关于java - 如何使用同步线程将数据插入到我的数据库表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56422668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com