2017-10-25 13 views
0

同じSQLプロシージャを実行するがパラメータが異なる2つのインスタンスを作成する必要があります。異なるパラメータを使用して同じメソッドの2つのインスタンスを作成する方法

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); 
... 
関連する問題