需要帮助来创建带参数的线程

时间:2013-04-26 15:44:25

标签: java multithreading concurrency

我有以下内容,当我有大量数据时需要一些时间(提交) 因此我认为也许可以为持久化线程负责的方法创建 因为IM新的线程东西 1.如何传递createClassInstance等参数 到线程。 ? 2.我应该如何将主要内部的电话改为theard?

谢谢,

主要

之前的

代码

public static void main(String[] args) throws Exception {

// Get class members
ClassHandle classMetaData = new ClassHandle();
createClassInstance = classMetaData.createClsObj(listClsObj);

// Persist data using JPA
PersistClassObject.persistObjects(createClassInstance,
        persistenceUnitName);

...

现在我实现了runnable,我在参数中有错误,我现在应该怎么做

public class TheredTest implements Runnable {

    @Override
    public void run() {


        // Persist data using JPA
        PersistClassObject.persistObjects(createClassInstance,
                persistenceUnitName);



    }

}

解决方案后的代码

        ClassHandle classMetaData = new ClassHandle();
        createClassInstance = classMetaData.createClsObj(listClsObj);

        PersistRunnable persistRunnable = new PersistRunnable(createClassInstance, persistenceUnitName);

        Thread thread = new Thread(persistRunnable);
        thread.start();




------


    @Override
    public void run() {
        // your persistence code referring to those arguments

        // Persist data using JPA
        PersistClassObject.persistObjects(theObjectsToPersist,
                persistenceUnitName);
    }

1 个答案:

答案 0 :(得分:1)

由于PersistClassObject.persistObjects是 static ,因此没有好办法让它成为Runnable并传入任何参数。 Runnable(和Callable)的一个缺点是他们不参与争论。你每次都需要做一些实例。例如非常粗略的东西,如:

class PersistRunnable implements Runnable {
  final List theObjectsToPersist;
  final String persistenceUnitName;

  public PersistRunnable (List objectsToPersist, String persistenceUnitName) {
      this.theObjectsToPersist = objectsToPersist;
      this.persistenceUnitName = persistenceUnitName;
   }

   @Override
   public void run() {
       // your persistence code referring to those arguments
   }
}

这个新类是替换你的PersistClassObject还是补充它取决于你使用PersistClassObject的其他位置。