如何使用同步线程将数据插入我的数据库 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