在 IBM Liberty 服务器中实现并发
Achieving concurrency in IBM liberty server
我在 IBM-liberty 服务器上工作,我需要在其中实现 5 个线程的并发。我浏览了 IBM 官方网站上提供的一些链接。但无法理解我应该如何配置 server.xml,以便每当我将我的 Java 应用程序部署到 liberty 服务器时,5 线程将同时 运行 我的 Java 组件。任何人都可以帮我举一个真正努力的例子。以下是我的代码库,
我修改了我的 server.xml 并做了以下更改,
<featureManager>
<feature>concurrent-1.0</feature>
</featureManager>
<managedScheduledExecutorService jndiName="concurrent/scheduledExecutor1">
<contextService jndiName="concurrent/threadContextSvc2"/>
<concurrencyPolicy max="2"/>
</managedScheduledExecutorService>
web.xml
<resource-env-ref>
<resource-env-ref-name>concurrent/scheduledExecutor1</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.concurrent.ManagedScheduledExecutorService</resource-env-ref-type>
</resource-env-ref>
<resource-env-ref>
<resource-env-ref-name>concurrent/threadContextSvc2</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.concurrent.ContextService</resource-env-ref-type>
</resource-env-ref>
main() 方法
InitialContext initialContext = new InitialContext();
executor = (ManagedScheduledExecutorService) initialContext.lookup("concurrent/scheduledExecutor1");
executor.submit(new OrderProcessCI());
运行()方法
public void run() {
System.out.println(" Thread name :: "+Thread.currentThread().getName()+" Thread id :: "+Thread.currentThread().getId());
}
在上面的代码中,似乎只有单线程 运行ning.. 当我试图在 运行 方法中达到断点时,控制只出现一次。 Sysout 只打印一次。我怎样才能为至少 5 个线程做这个。我还检查了 ThreadPool 概念,但我怎样才能自由实现它。谁能帮我举个例子。
您只看到一个线程,因为您只向执行程序提交一个任务 executor.submit(new OrderProcessCI());
,如果您想要其中的 5 个任务,不知何故您需要向执行程序提交 5 个实例执行人。您是否有意使用 ManagedScheduleExecutorService 因为您需要安排重复发生的或未来的工作?如果您只需要 运行 个任务,请改为使用 ManangedExecutorService。由于您似乎没有更改线程上下文,因此从配置中省略它并让执行程序使用其默认值。鉴于你说的是“5 个线程”,我假设你想要那么多(让执行者计算出它需要多少的首选方法),你需要在 server.xml <concurrencyPolicy max="5" maxPolicy="strict"/>
我在 IBM-liberty 服务器上工作,我需要在其中实现 5 个线程的并发。我浏览了 IBM 官方网站上提供的一些链接。但无法理解我应该如何配置 server.xml,以便每当我将我的 Java 应用程序部署到 liberty 服务器时,5 线程将同时 运行 我的 Java 组件。任何人都可以帮我举一个真正努力的例子。以下是我的代码库,
我修改了我的 server.xml 并做了以下更改,
<featureManager>
<feature>concurrent-1.0</feature>
</featureManager>
<managedScheduledExecutorService jndiName="concurrent/scheduledExecutor1">
<contextService jndiName="concurrent/threadContextSvc2"/>
<concurrencyPolicy max="2"/>
</managedScheduledExecutorService>
web.xml
<resource-env-ref>
<resource-env-ref-name>concurrent/scheduledExecutor1</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.concurrent.ManagedScheduledExecutorService</resource-env-ref-type>
</resource-env-ref>
<resource-env-ref>
<resource-env-ref-name>concurrent/threadContextSvc2</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.concurrent.ContextService</resource-env-ref-type>
</resource-env-ref>
main() 方法
InitialContext initialContext = new InitialContext();
executor = (ManagedScheduledExecutorService) initialContext.lookup("concurrent/scheduledExecutor1");
executor.submit(new OrderProcessCI());
运行()方法
public void run() {
System.out.println(" Thread name :: "+Thread.currentThread().getName()+" Thread id :: "+Thread.currentThread().getId());
}
在上面的代码中,似乎只有单线程 运行ning.. 当我试图在 运行 方法中达到断点时,控制只出现一次。 Sysout 只打印一次。我怎样才能为至少 5 个线程做这个。我还检查了 ThreadPool 概念,但我怎样才能自由实现它。谁能帮我举个例子。
您只看到一个线程,因为您只向执行程序提交一个任务 executor.submit(new OrderProcessCI());
,如果您想要其中的 5 个任务,不知何故您需要向执行程序提交 5 个实例执行人。您是否有意使用 ManagedScheduleExecutorService 因为您需要安排重复发生的或未来的工作?如果您只需要 运行 个任务,请改为使用 ManangedExecutorService。由于您似乎没有更改线程上下文,因此从配置中省略它并让执行程序使用其默认值。鉴于你说的是“5 个线程”,我假设你想要那么多(让执行者计算出它需要多少的首选方法),你需要在 server.xml <concurrencyPolicy max="5" maxPolicy="strict"/>