比较来自世界各地的卖家的域名和 IT 服务价格

与另一个任务并行运行任务

我有以下课程
Foo

, 它使用课程
FooProcessor

. 所以我想做的是,这是通过执行实例过程的方法 cp1, 并行,我想运行
cp2.process//

.


public class Foo {

public static void main/String [] args/{

FooProcessor cp1 = new FooProcessor//;
FooProcessor cp2 = new FooProcessor//;

cp1.process//;
// in parallel process cp2.process//;
}

}

public class FooProcessor {
public void process//{
System.out.println/"Processing.."/;
}
}


但是,我想 cp1 始终如一地执行,所以我希望他跑步并完成 cp2 它没有结束或失败,这是正常的。 如果失败,我想加入结果。 他在这个样本中返回任何内容,但我想返回结果。

为此目的,我应该使用 TaskExecutor? 还是线程?

我只想要 cp2 并行工作 cp1. 或者如果我补充说,请说, cp3, 我希望他并行工作 cp1.
已邀请:

知食

赞同来自:

一般来说,我将如何实施它 :

通过各种过程
http://docs.oracle.com/javase/ ... .html
, 例如
ExecutorService executor = Executors.newFixedThreadPool/nThreads/;


食物
http://docs.oracle.com/javase/ ... .html
列表中的所有任务 /回报 ExecutorService#submit/

等待完成
future1.get//

, 在哪里
future1

- 这是与之相关的未来 cp1

立刻
get

返回 /cp1 完成的/,
http://docs.oracle.com/javase/ ... %2529
所有其他未来 /或者
http://docs.oracle.com/javase/ ... %2529
如果您不再需要执行者,请执行者服务/

因此,这取消过程致力于您的 cp2, cp3 等等必须介绍中断策略,这将迫使他们尽快停止他们做的事情。

知食

赞同来自:

当然,你可以使用简单而简单的线程。

如果您知道您需要将更多方法添加到处理器类以及此实例中以保存执行顺序 - 假设您首先启动方法 foo, 然后运行方法 bar, 并且希望它们以异步启动,但保留执行顺序 /第一的 foo, 然后 bar/, 我会考虑使用活动对象模板。

我还建议使用这种方法,因为对于处理器的用户类,它将隐藏实现细节。

另外,想想提供
http://en.wikipedia.org/wiki/Decorator_pattern
/wrapper, 这将确保对象的异步能力 - 因此,您可以执行异步地控制哪个对象,并且不是,您不必 "pollute" 您的处理器类,具有异步呼叫所需的代码。

在这种情况下使用的示例是 -


AsyncProcessor ap = new AsyncProcessor/p1/;
ap.process//; //executed asynchronously
Proccessor p2 = new Processor//;
p2.process//; //executed synchronously


其他瑞拉斯应该使用你提到的,表演者 -
这可以通过实现流池来实现并按下按钮来实现。 "execution units to it".

执行单元将包含目标对象 /cp1, cp2, .../ 和执行方法 /只有当前的过程/

线程将需要 "an execution unit" 从队列开始并启动它们。

实现类似于活动对象,但是 "interface" 对于用户的特点是它使用该类的事实 "TaskExecutor" 提供他 "execution units"

龙天

赞同来自:

Thread 会很好 choice...Something, 作为采用新流并启动它们的方法......

喜特乐

赞同来自:

根据

,

你可以使用类似的东西
AsyncTaskExecutor

[1], 返回对象
Future

. 然后你可以在将来等待找到是否 cp2 祝你好运。

[1]
http://static.springsource.org ... %2529

小姐请别说爱

赞同来自:

如果您编写自己的独立应用程序,则使用线程可以是最简单的前进方式。 如果您在环境中 Java EE, 您不必创建自己的流量对象,并使用其他机制 /例如,发送消息并强制消息来处理您发送的信号/. 这是为了容器完成的 Java EE 控制使用资源,例如流池。

使用Streams的示例:


Thread t1 = new Thread/new Runnable// {
@Override
public void run// {
executeSomeCodeInP1//;
}
}/;

Thread t2 = new Thread/new Runnable// {
@Override
public void run// {
executeSomeCodeInP2//;
}
}/;

t1.start//;
t2.start//;

// if you want to wait for both threads to finish before moving on,
// "join" the current thread
t1.join//;
t2.join//;

要回复问题请先登录注册