1

在我的应用程序中,我正在执行一堆 SQL 查询,例如作业和执行的详细信息,它们被插入到表中。插入任何记录后,侦听​​器应立即将其拾取并开始监视执行状态并更新同一表中的状态。

我的前端已准备就绪,直到现在我能够执行作业(多个查询)并将详细信息插入表中。现在我想捕获执行状态,并且我应该能够结束、暂停、重新启动执行。

当我经历多线程部分时,我遇到了 ExecutorService。

我的问题是我应该使用 ExecutorService 执行此操作吗?还是有其他方法?

请分享任何教程链接。

4

4 回答 4

1

在您的情况下,我认为您可以使用 ExecutorService 并在Callable对象中创建作业,这将帮助您以Future 对象的形式获取正在运行的作业的状态。

对于教程,我更喜欢这个,它有关于并发包的基本信息。

于 2012-06-07T07:07:12.850 回答
0

我使用 ExecutorService 来运行并行单元测试。并发现它非常成功。所以我建议你使用它。参考这个

于 2012-06-07T07:09:40.773 回答
0

也许我在这里的问题的答案可以帮助捕获任务的状态。

如何获得未来任务执行状态

虽然 Executors 框架非常强大,几乎可以在任何情况下使用,但也许你应该看看Quartz之类的并发库,如果使用 Executors 已经解决了你会遇到的很多问题。

于 2012-07-05T07:04:21.660 回答
0

是的。您可以ExecuteServiceCallableFuture实现这一目标。

示例代码:

import java.util.concurrent.*;
import java.util.*;
import java.util.Random;

public class CallableDemo{
    public CallableDemo(){
        System.out.println("creating service");
        ExecutorService service = Executors.newFixedThreadPool(10);

        System.out.println("Start");
        List<MyCallable> futureList = new ArrayList<MyCallable>();
        for ( int i=0; i<10; i++){
            MyCallable myCallable = new MyCallable();
            Future future = service.submit(myCallable);
            try{
                System.out.println("future.isDone = " + future.isDone());
                /* You can use future.get() blocking call set time out*/
                System.out.println("future: call ="+future.get());
            }
            catch (CancellationException ce) {
                ce.printStackTrace();
            } catch (ExecutionException ee) {
                ee.printStackTrace();
            } catch (InterruptedException ie) {
                Thread.currentThread().interrupt(); // ignore/reset
            }
        }       
        service.shutdown();
    }
    public static void main(String args[]){
        CallableDemo demo = new CallableDemo();
    }
    class MyCallable implements Callable<Long>{
        Long result = 0L;

        public MyCallable(){

        }
        public Long call(){
            // Add your business logic
            // set the result
            return result;
        }
    }
}

关键说明:

  1. future.get() 在 Callable 任务计算后返回。您可以阻止直到 Callable 完成,也可以为其设置超时。
  2. 如果得到InterruptedException,请中断当前线程并继续。
  3. 别忘了打电话shutdown()
于 2015-11-13T09:22:00.173 回答