2017-10-25 1 views
0

동일한 SQL 프로 시저를 실행하지만 다른 매개 변수로 실행하는 두 개의 인스턴스를 작성해야합니다.다른 매개 변수로 동일한 메소드의 두 인스턴스를 작성하는 방법

public void run() { 

    // TRUE if there is no more VER_STOCK 
    boolean booEsgotado = false; 
    System.out.println("Starting thread" + numThread); 
    try { 
     objLigacao = DriverManager.getConnection(LIGACAO, 
       UTILIZADOR, SENHA); 
     // manual control of transactions 
     objLigacao.setAutoCommit(false); 

     while (booEsgotado == false && i<=5) { 

      try { 

       objComando = objLigacao.prepareCall(INSERE); 

       // 1 = first parameter (:1) 
       objComando.setInt(1, ID); 
       objComando.setInt(2, PRODUTO); 
       objComando.setInt(3, Q); 


       objComando.execute(); 
       objComando.close(); 
       // If done with success commit the operations 
       objLigacao.commit(); 
       i++; 
       System.out.println("Sold a unit in thread " + numThread + " i = " + i); 


       objComando = objLigacao.prepareCall(QUANT); 
       objComando.setInt(1, PRODUTO); 
       objResultado = objComando.executeQuery(); 
       while(objResultado.next()) { 
       stock=objResultado.getInt(1);} 
       System.out.println("Stock atual=" + stock); 


      } 
      catch (SQLException objExcepcao) { 

       System.out.println("" + objExcepcao.getMessage()); 
       // If something failed rollback the operations 

       objComando.close(); 
       objLigacao.rollback(); 
       booEsgotado = true; 
       System.out.println("Product is out of stock in thread" + numThread); 
      } 
     } 
     // Libertação de recursos. 
     objLigacao.close(); 
    } catch (SQLException objExcepcao) { 
     System.out.println(objExcepcao.getMessage()); 
    } 

    System.out.println("The end of thread " + numThread); 

} 

두 가지 경우 모두 동일한 인수로 동일한 절차 만 실행할 수 있습니다. 어디에서 동일한 프로 시저를 실행해야하지만 두 인스턴스에서 다른 인수를 사용해야합니다.

runne1 objInstancia1 = new runne1(1); 
runne1 objInstancia2 = new runne1(2); 
// Create a thread for each instance 
Thread objThread1 = new Thread(objInstancia1); 
Thread objThread2 = new Thread(objInstancia2); 
objThread1.start(); 
objThread2.start(); 
try { 
objThread1.join(); 
objThread2.join(); 
+0

귀하의 질문이 명확하지 않다. – Gendarme

답변

0

하위 클래스 Thread 필요한 매개 변수를 지정하는 생성자를 제공하고이를 인스턴스 필드로 저장합니다.
이렇게하면 run() 방법에서 사용할 수 있습니다.

public class MyCallThread extends Thread { 

    private int paramOne; 
    private int paramTwo; 

    public MyCallThread (Runnable runnable, int paramOne, int paramTwo){ 
    super(runnable); 
    this.paramOne = paramOne; 
    this.paramTwo = paramTwo; 
    } 

    public void run(){ 
     ... 
     objComando.setInt(1, paramOne); 
     ... 

    } 
} 

그리고 그런 식으로 인스턴스화 :

int paramOne = ...; 
int paramTwo = ...; 
Thread objThread1 = new MyCallThread(objInstancia1, paramOne, paramTwo); 
... 
관련 문제