vinoth kanagasabai
vinoth kanagasabai

Reputation: 13

How to insert data to my db table using synchronized threads

I have doubt in fetching my data from mysql table using synchronized threads, I tried using join(method), but I want to use synchronized keyword and need to get the same result. Please provide me the correct code by modifying mine. I did asynchronously.

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);}
        }   
}
}

I expect the output of fname lname Thread-0 fname lname Thread-1 fname lname Thread-2 fname lname Thread-3 fname lname Thread-4

Upvotes: 1

Views: 1163

Answers (1)

pankaj
pankaj

Reputation: 1014

You can use synchronized on the block where you want mutual exclusion. synchronized ensures only one thread will enter that block. It doesn't ensure the order. To maintain the order, you can use join() method. Here's is your modified code, where I'm just printing values instead of inserting into 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);}
    }
  }
}

output:

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

Upvotes: 1

Related Questions