如何使用同步线程将数据插入我的数据库 table
How to insert data to my db table using synchronized threads
我对使用同步线程从 mysql table 获取数据有疑问,我尝试使用 join(method),但我想使用 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 线程 0
fname lname 线程 1
fname lname 线程 2
fname lname 线程 3
fname lname 线程 4
可以在需要互斥的块上使用synchronized。 synchronized 确保只有一个线程将进入该块。它不能确保顺序。
要维护顺序,可以使用 join() 方法。
这是您修改后的代码,我只是打印值而不是插入 DB
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
我对使用同步线程从 mysql table 获取数据有疑问,我尝试使用 join(method),但我想使用 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 线程 0 fname lname 线程 1 fname lname 线程 2 fname lname 线程 3 fname lname 线程 4
可以在需要互斥的块上使用synchronized。 synchronized 确保只有一个线程将进入该块。它不能确保顺序。 要维护顺序,可以使用 join() 方法。 这是您修改后的代码,我只是打印值而不是插入 DB
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