2013-04-26 30 views
0

即时通讯具有以下内容,当我有很多的数据需要一些时间(提交) 因此,我认为可能创建的方法负责持续线程 自IM新线程的东西 1.how我应该传递参数像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); 



    } 

} 

解决方案后的代码在propse

 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

创建一个线程不会使代码执行得更快,除非您想创建一个异步方法,否则我不会看到这方面的好处。使用线程会有好处,但在这种情况下,在我看来,它只是您在那里工作的一个单元。 – Marco 2013-04-26 15:48:20

+0

是的我想将其更改为异步方法 – 2013-04-26 15:50:11

+0

您首先要阅读某种并发教程,Oracle有一个这里:http://docs.oracle.com/javase/tutorial/essential/concurrency/ – 2013-04-26 15:51:29

回答

1

由于PersistClassObject.persistObjects是静态,有使之成为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还有什么地方补充。

+0

我已经更改了代码,如下所示可以吗? – 2013-04-26 16:42:40

+0

ClassHandle classMetaData = new ClassHandle(); \t \t createClassInstance = classMetaData.createClsObj(listClsObj); \t \t PersistRunnable persistRunnable = new PersistRunnable(createClassInstance,persistenceUnitName); \t \t \t \t Thread thread = new Thread(persistRunnable); \t \t线程。开始(); ------ \t @覆盖 \t公共无效的run(){ \t \t //你的持久性代码指的是那些参数 \t \t \t \t使用JPA //坚持数据\t \t PersistClassObject.persistObjects(theObjectsToPersist, \t \t \t \t persistenceUnitName); \t} \t \t \t persistenceUnitName);; \t} – 2013-04-26 16:43:06

+0

这是很难阅读,但看起来o.k.但不要只是调用Thread.start(),查看线程池或执行程序等...... – user949300 2013-04-26 16:54:08