首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java-ee中的串行执行

Java-ee中的串行执行
EN

Stack Overflow用户
提问于 2014-04-21 21:16:03
回答 1查看 195关注 0票数 0

我有一些传入的并发请求,它们应该以串行方式处理。我试图通过将请求转换为消息并将其发送到jms队列来实现这一点。然后使用mdb处理队列。

使用特定于供应商的配置,我知道我可以将mdb限制为一个实例,但建议使用什么可移植的方法来解决此问题?

编辑:忘记提到我并不真正需要jms的特性(可靠性等)。

EN

回答 1

Stack Overflow用户

发布于 2014-04-21 22:28:52

假设你有这样的Job。

代码语言:javascript
复制
class LogJob implements Runnable{
    private final String name;
    public LogJob(String name){
        this.name = name;
    }
    @Override
    public void run() {
        System.out.println(" Starting ."+name);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(" End ."+name);
    }
}

它只是显示开始和结束作业。放置睡眠以进行演示

创建作业列表

代码语言:javascript
复制
        ArrayList<LogJob> jobs = new ArrayList<LogJob>();
        for ( int i=0;i<10;i++){
            LogJob job = new LogJob("Job"+i);
            jobs.add(job);
        }

让我们看看如何在串行中处理

代码语言:javascript
复制
   ExecutorService singleThread = Executors.newSingleThreadExecutor();
        for (Iterator<LogJob> iterator = jobs.iterator(); iterator.hasNext();) {
            singleThread.execute(iterator.next());
        }
        singleThread.shutdown();

这将提供一个输出。

代码语言:javascript
复制
Starting .Job0
 End .Job0
 Starting .Job1
 End .Job1
 Starting .Job2
 End .Job2
 Starting .Job3
 End .Job3
 Starting .Job4
 End .Job4
 Starting .Job5
 End .Job5
 Starting .Job6
 End .Job6
 Starting .Job7
 End .Job7
 Starting .Job8
 End .Job8
 Starting .Job9
 End .Job9

更新

基于评论中的对话,我了解到您必须在Java-EE环境中使用它。正如您所说的,您必须使用ManagedExecutorService。然而,你不需要使用单例Ejb和ConcurrentLinkedQueue。

您可以将作业实现为可调用的,并且可以使用Future.get()阻止进一步的处理。

代码语言:javascript
复制
String name = managedService.submit(iterator.next()).get();

来自API

代码语言:javascript
复制
    If you would like to immediately block waiting for a task, 
you can use constructions of the form result = exec.submit(aCallable).get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23198220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档