在方法

时间:2017-02-16 08:36:08

标签: java multithreading

我在Spring MVC中有一个应用程序。在控制器中,用户可以运行进程(有按钮)。处理工作一小时(将其命名为#34; longProces")。 所以我想运行这种方法" longProces"在其他线程中。

当" longProces"正在运行,其他用户(当他想要运行" longProces")应该收到消息:"此过程正在运行"并且他的线程被杀死(不等待它转过来)。

我能做到这一点?有什么想法吗?

感谢回答

3 个答案:

答案 0 :(得分:0)

这是一个基于设计的问题。

对于这种情况,我的直接解决方案是 - 在数据库或任何其他持久层中维护这个长进程状态,以便您可以为每个请求实现逻辑首先检查持久性中是否有任何长进程处于活动状态。根据这个条件,你可以决定你的流动。

另一个关键点是,持久层方法是使用一个共同的共享流程处理多个用户请求的正确解决方案。

答案 1 :(得分:0)

以下是我的狙击代码:

expect(page).to have_current_path("/whatever")

我以为我在构造函数中设置了一个线程。

也许我应该为Spring TaskExecutor创建一个单例bean?

答案 2 :(得分:0)

您可以使用ExecutorService而不是Executor。

在执行程序服务中提交任务,并在某些列表或映射中维护Future引用。 ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); Future future = threadExecutor.submit(new Task()); //submit the future in collection

在每个新请求中,您可以检查已提交的任务,如果已完成,则显示状态

 //retrieve future instance from collection
 if(future.isDone()){ 
      //accept new request
 }
 else "process already running"