繁体   English   中英

如何使用不同的参数创建同一方法的两个实例

[英]How to create two instances of the same method with different parameters

我需要创建2个实例,这些实例运行相同的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();

子类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);
 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM