-1

我在这个网站上搜索了我的问题的一些答案;但每一次都失败了。如果我不把它放在 ExecutorService 中,我可以很好地删除,但如果我这样做,它不会删除。没有错误发生,只是记录仍在数据库中。请指教。

 public void deleteAllTrials(List<Trials>list) { 
      threadList = list;
      ExecutorService executor = Executors.newFixedThreadPool(1);
      executor.execute(new Job1());
      executor.shutdown();

}

 public class Job1 implements Runnable {
        @Override
        public void run() {
            //Session session = (Session) entityManager.getDelegate();
            EntityManagerFactory emf = entityManager.getEntityManagerFactory();
            EntityManager em = emf.createEntityManager();
            System.out.println("Size of threadList" + threadList.size());
            long start = System.currentTimeMillis(); 

            for(int i =0; i<threadList.size(); i++){
                System.out.println("In thread...");

                       Trials mergedEntity = em.merge(threadList.get(i));
                em.remove(mergedEntity);
            }
            //System.out.println("Result list in service:" + list.size());
            //em.close();
            long end = System.currentTimeMillis();
            System.out.println("Threads took this long:" + (end - start));
        }
    }
4

2 回答 2

1

我发现 EJB 比我想象的更强大。如果您只是在您希望应用程序在支持线程中分离的方法之上添加@Asynchronus,它将充当一个单独的线程,允许用户继续做他想做的事情而无需等待进程完成。

 @Asynchronous
 public void deleteAllTrials(List<TrialBillet>list) { 
     List<TrialBillet> threadList = new ArrayList<TrialBillet>();
      threadList = list;
      for(int i =0; i<threadList.size(); i++){
         this.delete(threadList.get(i));
      }


 }
于 2014-08-05T14:31:55.817 回答
0

如果你想使用 Executors,java-ee-7已经引入了ManagedExecutorService

来自 Java EE 7 教程

ManagedExecutorService:应用程序使用托管执行器服务来异步执行提交的任务。任务在由容器启动和管理的线程上执行。容器的上下文被传播到执行任务的线程。例如,通过使用 ManagedExecutorService.submit() 调用,可以提交诸如 GenerateReportTask 之类的任务以在以后执行,然后通过使用 Future 对象回调,在结果可用时检索结果。

代码示例:

public class MyClass {

    @Resource
    private ManagedExecutorService mes;


    public void myMethod() {
        mes.execute(new Worker());
    }
}
于 2014-08-05T14:46:45.090 回答