我有以下内容,当我有大量数据时需要一些时间(提交) 因此我认为也许可以为持久化线程负责的方法创建 因为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);
}
答案 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的其他位置。